یک رویکرد مبتنی بر ریاضی برای پیش بینی یک سینوسی متغیر در پایتون.
این آموزش نحوه پیش بینی یک سینوئید متغیر در پایتون را شرح می دهد. در مرحله اول ، برخی از داده های سینوسی از یک پرونده CSV بارگیری می شوند. سپس ، داده ها از طریق منحنی سینوسی شکل می گیرند. پس از آن ، از رگرسیون خطی برای مدل سازی حداقل و حداکثر قله استفاده می شود. سرانجام ، از خطوط مدل شده برای محاسبه قله های بعدی استفاده می شود.
کد کامل را می توان از مخزن GitHub من بارگیری کرد.
داده های مورد تجزیه و تحلیل: ورود به مراکز اقامتی گردشگری استخراج شده از https://ec. europa. eu/eurostat/web/tourism/data/database
واردات و تمیز کردن داده ها
داده ها را از CSV بارگیری کرده و آنها را تمیز کنید
در مرحله اول ، ما پرونده CSV را می خوانیم و فقط داده های مربوط به ایتالیا را انتخاب می کنیم (df [df ['geo'] == 'it']) ، به شکل اعداد (df [df ['واحد'] == 'nr']) و به جمع کلیه داده های موجود (ورود داخلی و خارجی) (DF [DF [' C_RESID '] ==' Total ']) اشاره شده است.
سپس ستون های مفید را از طریق قطره عملکرد () حذف نمی کنیم. توجه داشته باشید که ما پارامتر را در جای خود قرار می دهیم = درست برای ذخیره جلوه ها در متغیر اصلی DF.
اکنون می توانیم برخی از خطاها را در داده ها اصلاح کنیم: برخی از ردیف ها شامل کاراکتر هستند: ، این بدان معنی است که هیچ داده ای در دسترس نیست. ردیف های دیگر حاوی حرف ب. ما تغییر می کنیم: در 0 و حرف b را حذف می کنیم.
اکنون مبلغ را روی ستون ها محاسبه می کنیم ، تا تعداد کل ورودی ها را برای هر ماه بدست آوریم. ما نتایج را در متغیر y ذخیره می کنیم.
تجزیه و تحلیل اولیه
داده ها را به منظور درک روند داده ها ترسیم کنید
ما برای درک خط روند طرح می کنیم. ما بردار کمکی X را می سازیم که شامل تمام ماه ها است. ماه 0 به ژنوه 1990 اشاره دارد. به منظور نمایش برچسب های X در نمودار هر 5 سال ، ما دو متغیر کمکی ، X_ticks و X_Labels می سازیم.
توجه داشته باشیم که طی 8 سال گذشته با توجه به سالهای گذشته ، حداکثر قله ها افزایش یافته است. بنابراین ما 8 سال گذشته تجزیه و تحلیل خود را محدود می کنیم. این بدان معنی است که ما باید 22 سال اول را کنار بگذاریم. ما X و Y را فقط با سالهای گذشته بازنشانی می کنیم.
تقریب داده ها
داده های تقریبی با یک سینوسی
اکنون می توانیم داده ها را با یک سینوسی تقریبی کنیم. معادله سینوسی یک*np. sin (امگا*x + فاز) + افست است ، که در آن:
- |الف |دامنه ، یعنی نیمی از فاصله بین حداکثر و حداقل مقادیر عملکرد را نشان می دهد
- امگا تعداد چرخه های بین 0 تا 2pi است. دوره t 2pi/omega است
- فاز تغییر افقی است
- افست تغییر عمودی است ، یعنی مقدار بین حداقل قله و دامنه. در اینجا چند جزئیات در مورد افست آورده شده است: https://www. ck12. org/book/ck-12-precalculus-concepts/section/5. 4/
ما مقادیر اولیه را برای سینوسی نیز تعریف می کنیم. ما دوره t = 12 را تعیین می کنیم ، یعنی تعداد ماه ها در یک سال. اگر دوره مشخص نیست ، باید آن را محاسبه کنیم. ما می توانیم از تبدیل سریع فوریه استفاده کنیم. در این لینک ها می توانید جزئیات بیشتری در مورد این جنبه پیدا کنید: https://stackoverflow. com/questions/16716302/howdo-do-i-fit-a-sine-curve-to-my-data-with-pylab-and-numpy ، https://www. oreilly. com/library/view/elegant-scipy/9781491922927/ch04. html و https://docs. scipy. org/doc/numpy/reference/generated/numpy. fft. fft. fft. html
اکنون ما آماده هستیم تا داده های خود را با یک سینوسی تقریب دهیم. ما از تابع CURVE_FIT () ارائه شده توسط SCIPY استفاده می کنیم. ما نتایج را ترسیم می کنیم. برای اطلاعات بیشتر در مورد عملکرد CURVE_FIT () ، لطفاً به https://docs. scipy. org/doc/scipy/reference/generated/scipy. optimize. curve_fit. html نگاهی بیندازید.
ما داده های خود را با یک سینوسی با مقدار ثابت a تقریب داده ایم. در مورد ما هر دو دامنه A و جبران متغیر هستند. ایده این است که حداکثر قله ها و حداقل قله های داده های ما را محاسبه کنیم. سپس می توانیم از تفاوت آنها برای محاسبه بردار دامنه ها استفاده کنیم و آنها را به عملکرد سینوسی () منتقل کنیم.
ما عملکرد get_peaks () را تعریف می کنیم ، که قله های یک آرایه را محاسبه می کند. ما از هر عناصر t آرایه را نمونه می گیریم و قله را در هر t محاسبه می کنیم.
ما حداکثر و حداقل قله ها را محاسبه می کنیم.
اکنون می توانیم آرایه دامنه ها و جبران ها را محاسبه کنیم.
از آنجا که A و Offset ویژگی های جدیدی هستند ، ما باید آنها را به عنوان متغیرها اضافه کنیم. بنابراین ما یک ویژگی متغیر جدید را تعریف می کنیم ، که ویژگی های ورودی جدید مدل ما را تعریف می کند. سپس عملکرد متغیر_sinusoid () را تعریف می کنیم ، که ویژگی ها را به عنوان ورودی می گیرد.
تنها پارامترهای برگردانده شده توسط مدل ما امگا و فاز هستند بنابراین ما عملکرد GET_P0 () را با مقادیر اولیه امگا و فاز تغییر می دهیم. تابع جدید متغیر_Get_P0 () نامیده می شود.
ما متناسب با نتایج مدل و طرح هستیم.
پیش بینی روند آینده
مقادیر آینده را برای متغیر سینوسی پیش بینی کنید
مرحله بعدی شامل پیش بینی سینوسی بعدی ، یعنی سینوسی برای سال 2020 است. برای انجام این کار ، ما باید حداکثر و حداقل قله های بعدی را محاسبه کنیم. ما می توانیم این کار را با تقریب حداکثر و حداقل قله با دو رگرسیون خطی انجام دهیم. سپس ، ما می توانیم حداکثر اوج را در فوری I (اوت 2020) به عنوان مقدار Y حداکثر رگرسیون خطی که در فوری (I-1) + PI (I-1 نمایانگر اوت 2019 است) محاسبه کنیم. به همین ترتیب ، می توانیم حداقل اوج را برای سال 2020 محاسبه کنیم.
در مرحله اول ، ما قله هایی را که به مدل خطی منتقل می شود تغییر شکل می دهیم. سپس ، ما دو مدل خطی را می سازیم ، یکی برای هر خط پیش بینی ، با استفاده از کلاس Sklearn LinearRegression (). پس از آن ، ما با استفاده از عملکرد FIT () هر مدل را متناسب می کنیم.
ما قله های بعدی را هم به x_max_peaks و هم x_min_peaks اضافه می کنیم و سپس حداکثر و حداقل قله ها را از طریق عملکرد پیش بینی () پیش بینی می کنیم.
ما دو خط پیش بینی را ترسیم می کنیم.
ما سینوسی را برای تمام دوره ها ، از جمله سال 2020 محاسبه می کنیم. ما یک متغیر x_pred می سازیم که شامل x و 12 ماه 2020 است.
اکنون ، می توانیم متغیر ویژگی های_PRED را که به عملکرد متغیر_SinUsoid () منتقل می شود ، به روز کنیم. در مرحله اول ، دامنه A و افست را با مقادیر جدید به روز می کنیم و سپس متغیر ویژگی ها را به روز می کنیم.
سرانجام ، ما نمودارها را ترسیم می کنیم.
درس آموخته
در این آموزش ، من یک روش را برای تقریبی داده های دارای روند سینوسی از طریق یک سینوسی متغیر نشان داده ام. سپس مکانیسم پیش بینی مقادیر بعدی داده ها را شرح داده ام.
روش توصیف شده را می توان به انواع منحنی ها تعمیم داد:
- داده های بارگیری و تمیز کردن
- داده ها را برای درک خط روند ترسیم کنید
- خط روند را با یک منحنی از طریق تابع curve_fit () تقریبی کنید
- نتیجه طرح تقریب و مقایسه با خط روند داده اصلی
- در صورت لزوم ، خط روند تقریبی را بهبود بخشید
- دو مرحله قبلی را تکرار کنید تا تقریب خوبی پیدا کنید
- رگرسیون (خطی ، چند جمله ای ، ...) را برای پیش بینی مقادیر آینده محاسبه کنید
- از مقادیر پیش بینی شده برای به روزرسانی روند تقریبی استفاده کنید.
اگر این را تا کنون خوانده اید ، برای من امروز خیلی زیاد است. با تشکر!می توانید مقالات روند من را در این لینک بخوانید.