বিএসটিএস মডেল (আর মধ্যে) এর পূর্বাভাস সম্পূর্ণ ব্যর্থ হচ্ছে


15

বয়েশিয়ান স্ট্রাকচারাল টাইম সিরিজের মডেলগুলি সম্পর্কে এই ব্লগ পোস্টটি পড়ার পরে , আমি এর আগে আমি আরিমা ব্যবহার করব এমন সমস্যার প্রসঙ্গে এইটিকে বাস্তবায়নের দিকে নজর দিতে চেয়েছিলাম।

আমার কিছু পরিচিত (তবে গোলমাল) মৌসুমী উপাদানগুলির সাথে কিছু তথ্য রয়েছে - এটির অবশ্যই একটি বার্ষিক, মাসিক এবং সাপ্তাহিক উপাদান রয়েছে এবং বিশেষ দিনগুলির কারণে কিছু প্রভাব রয়েছে (যেমন ফেডারেল বা ধর্মীয় ছুটির দিনগুলি)।

আমি ব্যবহার করেছি bsts বাস্তবায়নের প্যাকেজটি এবং যতদূর আমি বলতে পারি যে আমি কোনও ভুল করি নি, যদিও উপাদানগুলি এবং ভবিষ্যদ্বাণীটি আমার প্রত্যাশা মতো দেখা যায় না। আমার প্রয়োগটি ভুল, অসম্পূর্ণ বা অন্য কোনও সমস্যা আছে কিনা তা আমার কাছে পরিষ্কার নয়।

পুরো সময়ের সিরিজটি এরকম দেখাচ্ছে:

সম্পূর্ণ তথ্য

আমি ডেটাগুলির কিছু উপসেটে মডেলটিকে প্রশিক্ষণ দিতে পারি, এবং মডেলটি ফিটের ক্ষেত্রে সাধারণত ভাল দেখায় (প্লটটি নীচে থাকে)। এটি করার জন্য আমি যে কোডটি ব্যবহার করছি তা এখানে:

library(bsts)

predict_length = 90
training_cut_date <- '2015-05-01'
test_cut_date <- as.Date(training_cut_date) + predict_length

df = read.csv('input.tsv', sep ='\t')

df$date <- as.Date(as.character(df$date),format="%Y-%m-%d")
df_train = df[df$date < training_cut_date,]

yts <- xts(log10(df_train$count), order.by=df_train$date)

ss <- AddLocalLinearTrend(list(), yts)
ss <- AddSeasonal(ss, yts, nseasons = 7)
ss <- AddSeasonal(ss, yts, nseasons = 12)
ss <- AddNamedHolidays(ss, named.holidays = NamedHolidays(), yts)

model <- bsts(yts, state.specification = ss, niter = 500, seed=2016)

মডেলটি যুক্তিসঙ্গত দেখাচ্ছে:

মডেল প্লট

তবে আমি যদি ভবিষ্যদ্বাণীটি প্লট করি তবে প্রথমে প্রবণতাটি পুরোপুরি ভুল, এবং দ্বিতীয়ত অনিশ্চয়তা খুব দ্রুত বাড়ায় - যেখানে আমি লগ- এ অক্ষ অক্ষর না করে ভবিষ্যদ্বাণী হিসাবে একই প্লটে অনিশ্চয়তা ব্যান্ডটি প্রদর্শন করতে পারি না to স্কেল. এই অংশের জন্য কোড এখানে:

burn <- SuggestBurn(0.1, model)
pred <- predict(model, horizon = predict_length, burn = burn, quantiles = c(.025, .975))

খাঁটি ভবিষ্যদ্বাণীটি এরকম দেখাচ্ছে:

খাঁটি ভবিষ্যদ্বাণী

এবং তারপরে প্রাথমিক বিতরণে যখন ছোট করে দেওয়া হয় (প্রশিক্ষিত থেকে ভবিষ্যদ্বাণীতে রূপান্তরিত বিন্দুযুক্ত লাইন দিয়ে, সমস্যাগুলি সুস্পষ্ট:

পুরো ডিস্ট্রো

আমি আরও মৌসুমী প্রবণতা যুক্ত করার, মৌসুমী প্রবণতাগুলি সরিয়ে, একটি এআর শব্দ যুক্ত করে, অ্যাডলোক্যাললাইনারমডেলকে অ্যাডজেনারালাইজডলোক্যালাইনারট্রেন্ডে পরিবর্তন করে এবং মডেলটিকে টুইট করার বিষয়ে আরও কয়েকটি বিষয় চেষ্টা করেছি, তবে কিছুই সমস্যার সমাধান করেনি এবং ভবিষ্যদ্বাণীগুলিকে আরও অর্থবহ করে তোলে। কিছু ক্ষেত্রে দিক পরিবর্তন হয়, সুতরাং 0 থেকে নেমে আসার পরিবর্তে ভবিষ্যদ্বাণী কেবল সময়ের ক্রিয়া হিসাবে বৃদ্ধি পেতে থাকে। মডেলটি কেন এভাবে ভেঙে যাচ্ছে তা আমি অবশ্যই বুঝতে পারি না। কোন পরামর্শ খুব স্বাগত হবে।


2
আপনি কেন আপনার ডেটা পোস্ট করবেন না এবং আমি চেষ্টা করব এবং সহায়তা করব ... মডেলটি কেন ভেঙে যাচ্ছে কারণ আমি এই পন্থাটি ব্যবহার করি না কারণ এটির অনেক বেশি অনুমান রয়েছে তাই উত্তর দিতে সক্ষম হব না Please সুনির্দিষ্টভাবে কতটি মূল্যবোধ রোধ করা হয়েছিল, শুরুর তারিখ এবং উত্সের দেশ।
আইরিশস্ট্যাট

আপনার মন্তব্যের জন্য অনেক ধন্যবাদ। আপনার একবার দেখার জন্য সময় পেলে আমি কাঁচা ডেটা এখানে আপলোড করেছি। ২০১৩ সালের শুরু থেকে এই বছরের শেষ পর্যন্ত ডেটা রয়েছে। আমি একটি আরিমা মডেল নিয়েও পূর্বাভাস দেওয়ার চেষ্টা করেছি কিন্তু সে থেকে প্রাপ্ত ভবিষ্যদ্বাণীগুলি হোল্ড-আউট ডেটার সাথে মেলে না। হোল্ড আউট ডেটা মূলত 2015 বা 2016 এর কিছুটা ভগ্নাংশ, আমি কতটা প্রশিক্ষণ ডেটা ব্যবহার করতে চেয়েছিলাম তার উপর নির্ভর করে।
anthr

এটি ডাউনলোড করতে আমার সমস্যা হচ্ছে .. দয়া করে আমার ইমেল ঠিকানায় একটি
সিএসভি

উত্তর:


26

স্টিভ স্কট এখানে। আমি বেষ্ট প্যাকেজ লিখেছিলাম। আমি আপনার জন্য কয়েকটি পরামর্শ আছে। প্রথমত, আপনার মৌসুমী উপাদানগুলি আপনি যা ভাবেন সেগুলি করছে না। আমার মনে হয় আপনার প্রতিদিনের ডেটা রয়েছে, কারণ আপনি একটি 7 মরসুমের উপাদান যোগ করার চেষ্টা করছেন যা সঠিকভাবে কাজ করা উচিত। তবে আপনি আপনার বার্ষিক মৌসুমী উপাদানটি প্রতি 12 দিন পুনরাবৃত্তি করতে বলেছিলেন। প্রতিদিনের ডেটা সহ মাসিক মৌসুমী উপাদান পাওয়া একরকম কঠিন কাজ তবে আপনি 52 সপ্তাহের মৌসুমীটি করতে পারেন AddSeasonal(..., nseasons = 52, season.duration = 7)

seasonal.durationযুক্তি মডেল কত সময় প্রতিটি সিজনের জন্য টেকসই হবে পয়েন্ট বলে। nseasonsযুক্তি বলা হয়েছে যে সব অনেক ঋতু একটি চক্র আছে। একটি চক্রের মোট সময় পয়েন্টের সংখ্যা season.duration * nseasons

দ্বিতীয় পরামর্শটি হ'ল আপনি ট্রেন্ডের জন্য আলাদা মডেল সম্পর্কে ভাবতে চাইতে পারেন। LocalLinearTrendমডেল খুবই নমনীয়, কিন্তু এই নমনীয়তা দীর্ঘমেয়াদী পূর্বাভাস মধ্যে অবাঞ্ছিত ভ্যারিয়েন্স হিসেবে দেখাতে পারেন। আরও কিছু ট্রেন্ড মডেল রয়েছে যা কিছুটা আরও কাঠামো ধারণ করে। GeneralizedLocalLinearTrend(nondescripttive নাম সম্পর্কে দুঃখিত) ধরে নিই ট্রেন্ডের "opeাল" উপাদানটি এলোমেলো হাঁটার পরিবর্তে একটি AR1 প্রক্রিয়া। আমি যদি ভবিষ্যতে ভবিষ্যদ্বাণী করতে চাই তবে এটি আমার ডিফল্ট বিকল্প। আপনার বেশিরভাগ সময় সিরিজের প্রকরণটি seasonতুরতা থেকে এসেছে বলে মনে হচ্ছে আপনি চেষ্টা করতে পারেন AddLocalLevelবা তার AddArপরিবর্তেও AddLocalLinearTrend

পরিশেষে, সাধারণভাবে যদি আপনি অদ্ভুত পূর্বাভাস পেয়ে থাকেন এবং মডেলটির কোন অংশটি দোষী তা আপনি খুঁজে বের করতে চান, plot(model, "components")আপনার অনুরোধ করা পৃথক টুকরোগুলিতে মডেলটি পচনশীল হওয়ার চেষ্টা করুন ।


এফওয়াইআই: আমার ডেটাগুলির সাথে আমার খুব একই রকম সমস্যা হচ্ছে, যা প্রতিদিনও হয়। আমি এখানে তালিকাভুক্ত আপনার সমস্ত পরামর্শ বাস্তবায়ন করেছি এবং কারওর পক্ষে কোনওরকম সহায়তা বলে মনে হচ্ছে না।
জাকজে

1
@ স্টিভ স্কট স্টিভকে বিরক্ত করার জন্য দুঃখিত, আমি আপনাকে এটি জিজ্ঞাসা করতে চাই: যদি আমি একাধিক সময়ের সিরিজটি মডেল করার চেষ্টা করি এবং আমি একটি হায়ারারিকিকাল মিশ্রিত মডেল কাঠামোতে থাকি, তবে আমি কি আপনার প্যাকেজটি ব্যবহার করে এটি মডেল করতে পারি? যাইহোক: আপনার প্যাকেজটির জন্য আপনাকে অনেক ধন্যবাদ!
টমমাসো গেরিণী

4

আমি মনে করি আপনি ডিফল্ট বার্নও পরিবর্তন করতে পারবেন। যেহেতু আমি বার্স ব্যবহার করেছি আমি হ্যান্ডআউট পিরিয়ডে আমার পরিসংখ্যান হিসাবে এমএপিই দিয়ে বার্ন এবং নাইটার মানের একটি গ্রিড তৈরি করেছি। মডেলটি যেমন বৈচিত্র্য আশা করতে পারে তার জন্য যদি আপনার ডেটাতে বিশাল বৈচিত্র থাকে তবে তার পরিবর্তে অ্যাডস্টুডেন্টলোকলাইনারট্রেন্ড ব্যবহার করে দেখুন


1
আমার ক্ষেত্রে সহায়ক ছিল যখন আমার কয়েকটি ডেটা পয়েন্ট ছিল (20)
এসসিএল্লান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.