كيفية بناء نماذج تجانس أسي باستخدام Python: تجانس أسي بسيط ، Holt ، و Holt-Winters

كم عدد أجهزة iPhone XS التي سيتم بيعها في أول 12 شهرًا؟ ما هو اتجاه الطلب على تسلا بعد أن يدخن المسك إيلون الأعشاب في عرض حي؟ هل سيكون هذا الشتاء دافئاً؟ (أنا أعيش في كندا.) إذا كنت مهتمًا بهذه المشاكل ، فإن التنعيم الأسي يعدك بإمكانية الوصول إلى المستقبل من خلال بناء النماذج.

تقوم طرق التجانس الأسي بتعيين الأوزان المتناقصة أصداءً للملاحظات السابقة. وكلما تم الحصول على الملاحظة ، سيتم تعيين الوزن الأعلى. على سبيل المثال ، من المعقول إرفاق أوزان أكبر للملاحظات من الشهر الماضي بدلاً من الملاحظات التي تمت منذ 12 شهرًا.

تجانس الأسي الأوزان من الماضي إلى الآن

يوضح هذا المقال كيفية إنشاء طرز بسيطة للتسوية الأسطوانية وهولت و Holt-Winters باستخدام Python و Statsmodels. لكل نموذج ، يتم تنظيم المظاهرة على النحو التالي ،

Statsmodels هي وحدة بيثون توفر فئات ووظائف لتنفيذ العديد من النماذج الإحصائية المختلفة. نحن بحاجة إلى استيراده إلى رمز Python على النحو التالي.

من statsmodels.tsa.api استيراد ExponentialSmoothing ، SimpleExpSmoothing ، Holt

تحتوي مجموعة البيانات المصدر في أمثلةنا على عدد مبيعات العقارات في بلدة أمريكية تغطي الفترة من 2007-01 إلى 2017-12.

مجموعة بيانات المصدر لمبيعات العقارات

استخدم مؤامرة الخط التي يمكننا أن نرى تباين البيانات على مر السنين.

df.plot.line (x = 'YEAR_MONTH_SALE_DATE' ،
             y = 'COUNT_YEAR_MONTH_SALE_SAMPLE')
plt.show ()

سوف نتوقع مبيعات العقارات في عام 2017 باستخدام البيانات التاريخية لمدة 10 سنوات (2007-2016).

تجانس الأسي البسيط (SES)

تعتبر SES اختيارًا جيدًا للتنبؤ بالبيانات بدون اتجاه واضح أو نمط موسمي. يتم حساب التوقعات باستخدام المتوسطات الموزونة ، مما يعني أن الأوزان الأكبر مرتبطة بأحدث الملاحظات ، بينما ترتبط الأوزان الأصغر بأقدم المشاهدات:

حيث 0≤ α ≤1 هي المعلمة تجانس.

يتم التحكم في معدل انخفاض الأوزان بواسطة معامل تجانس α. إذا كانت α كبيرة (أي بالقرب من 1) ، يتم إعطاء وزن أكبر للملاحظات الحديثة. هناك حالتان متطرفتان:

  • α = 0: التنبؤات لجميع القيم المستقبلية تساوي متوسط ​​(أو "يعني") البيانات التاريخية ، والتي تسمى طريقة المتوسط.
  • α = 1: قم ببساطة بتعيين جميع التنبؤات لتكون قيمة الملاحظة الأخيرة ، والتي تسمى طريقة Naive في الإحصائيات.

نحن هنا ندير ثلاثة أنواع من التجانس الأسي البسيط:

  1. في fit1 ، نوفر النموذج بشكل صريح بمعلمة التجانس α = 0.2
  2. في fit2 ، نختار α = 0.6
  3. في fit3 ، نستخدم التحسين التلقائي الذي يسمح لـ statsmodels بالعثور تلقائيًا على القيمة المحسّنة لنا. هذا هو النهج الموصى به.
# تجانس بسيط الأسي
fit1 = SimpleExpSmoothing (saledata) .fit (smoothing_level = 0.2 ، محسّن = False)
fcast1 = fit1.forecast (12) .rename (r '$ \ alpha = 0.2 $')
# قطعة
fcast1.plot (marker = 'o' ، color = 'blue' ، legend = True)
fit1.fittedvalues.plot (marker = 'o'، color = 'blue')



fit2 = SimpleExpSmoothing (saledata) .fit (smoothing_level = 0.6 ، محسّن = False)
fcast2 = fit2.forecast (12) .rename (r '$ \ alpha = 0.6 $')
# قطعة
fcast2.plot (marker = 'o' ، color = 'red' ، legend = True)
fit2.fittedvalues.plot (علامة = 'س' ، لون = 'أحمر')


fit3 = SimpleExpSmoothing (saledata) .fit ()
fcast3 = fit3.forecast (12) .rename (r '$ \ alpha =٪ s $'٪ fit3.model.params ['smoothing_level'])
# قطعة
fcast3.plot (marker = 'o' ، color = 'green' ، legend = True)
fit3.fittedvalues.plot (علامة = 'س' ، اللون = 'الأخضر')

plt.show ()

توقع مبيعات العقارات مع SES للفترة من 2017-01 إلى 2017-12.

التنبؤ مع تجانس بسيط الأسي

طريقة هولت

مدد هولت تجانسًا أسيًا بسيطًا (حل للبيانات مع عدم وجود اتجاه واضح أو موسمي) للسماح بالتنبؤ بالبيانات مع الاتجاهات في عام 1957. تتضمن طريقة هولت معادلة متوقعة ومعادلتين للتجانس (واحدة للمستوى وواحدة للاتجاه):

حيث 0≤ α ≤1 هي معلمة تجانس المستوى ، و 0≤ β * ≤1 هي معلمة تجانس الاتجاه.

للتنبؤ على المدى الطويل ، فإن التنبؤ بأسلوب هولت سيزيد أو ينقص إلى ما لا نهاية في المستقبل. في هذه الحالة ، نستخدم طريقة الاتجاه Damped التي تحتوي على معامل التخميد 0 <ϕ <1 لمنع التنبؤ "بالانتشار".

مرة أخرى ، نعرض هنا ثلاثة أنواع من طريقة Halt:

  1. في fit1 ، نوفر النموذج بشكل صريح بمعلمة التجانس α = 0.8 ، β * = 0.2.
  2. في fit2 ، نستخدم نموذجًا أسيًا بدلاً من نموذج Holt الإضافي (وهو افتراضي).
  3. في fit3 ، نستخدم نسخة مبللة من نموذج الإضافة Holt ولكن نسمح بتحسين معامل التخفيف while أثناء تحديد قيم α = 0.8 ، β * = 0.2.
fit1 = Holt (saledata) .fit (smoothing_level = 0.8 ، smoothing_slope = 0.2 ، محسّن = False)
fcast1 = fit1.forecast (12) .rename ("اتجاه هولت الخطي")

fit2 = Holt (saledata ، الأسي = صواب) .fit (smoothing_level = 0.8 ، smoothing_slope = 0.2 ، محسن = خطأ)
fcast2 = fit2.forecast (12) .rename ("الاتجاه الأسي")

fit3 = Holt (saledata ، damped = True). صالح (smoothing_level = 0.8 ، smoothing_slope = 0.2)
fcast3 = fit3.forecast (12) .rename ("الاتجاه المميت الإضافي")


fit1.fittedvalues.plot (marker = "o"، colour = 'blue')
fcast1.plot (color = 'blue' ، marker = "o" ، legend = True)
fit2.fittedvalues.plot (marker = "o"، colour = 'red')
fcast2.plot (color = 'red' ، علامة = "o" ، legend = True)
fit3.fittedvalues.plot (marker = "o"، color = 'green')
fcast3.plot (color = 'green' ، علامة = "o" ، legend = True)

plt.show ()
التنبؤ باستخدام طريقة Halt

طريقة هولت وينترز

(كان بيتر وينترز طالبًا لطريقة هولت. اقترح هولتر وينترز طريقة لأول مرة من قِبل بيتر ، ثم عملوا عليها معًا. يا له من علاقة جميلة وعظيمة. تمامًا كما التقى أفلاطون بسقراط).

طريقة هولت وينترز مناسبة للبيانات ذات الاتجاهات والمواسم والتي تتضمن معامل تجانس موسمي γ. هناك نوعان من الأشكال لهذه الطريقة:

  • طريقة المضافة: الاختلافات الموسمية ثابتة تقريبا من خلال هذه السلسلة.
  • طريقة التكاثر: تتغير التغيرات الموسمية بالتناسب مع مستوى السلسلة.

هنا ، نقوم بتشغيل طريقة Holt-Winters الكاملة بما في ذلك عنصر الاتجاه ومكون موسمي. Statsmodels يسمح لجميع المجموعات بما في ذلك كما هو مبين في الأمثلة أدناه:

  1. في fit1 ، نستخدم الاتجاه الإضافي ، والإضافة الموسمية لفترة الموسم_الطول = 4 وتحويل Box-Cox.
  2. في fit2 ، نستخدم الاتجاه المضاف ، الموسمية المضاعفة للفترة season_length = 4 وتحويل Box-Cox.
  3. في fit3 ، نستخدم اتجاهًا مميتًا مضافًا ، وموسمية مضافة من فترة موسم_الطول = 4 وتحول Box-Cox.
  4. في fit4 ، نستخدم اتجاهًا مميتًا مضافًا ، وموسمية مضاعفة للفترة season_length = 4 وتحويل Box-Cox.
fit1 = ExponentialSmoothing (saledata، seasonal_periods = 4، trend = 'add'، seasonal = 'add'). fit (use_boxcox = True)
fit2 = ExponentialSmoothing (saledata، seasonal_periods = 4، trend = 'add'، seasonal = 'mul'). fit (use_boxcox = True)
fit3 = ExponentialSmoothing (saledata، seasonal_periods = 4، trend = 'add'، seasonal = 'add'، damped = True) .fit (use_boxcox = True)
fit4 = ExponentialSmoothing (saledata، seasonal_periods = 4، trend = 'add'، seasonal = 'mul'، damped = True) .fit (use_boxcox = True)
fit1.fittedvalues.plot (style = '-'، color = 'red')
fit2.fittedvalues.plot (style = '-' ، اللون = 'الأخضر')

fit1.forecast (12) .plot (style = '-'، marker = 'o'، color = 'red'، legend = True)
fit2.forecast (12) .plot (style = '-'، marker = 'o'، color = 'green'، legend = True)

plt.show ()
print ("التنبؤ بمبيعات الخصائص باستخدام طريقة Holt-Winters مع كل من الموسمية المضافة والمتعددة.")
التنبؤ بمبيعات العقارات باستخدام طريقة Holt-Winters مع كل من الموسمية المضافة والمتعددة

لتلخيص ، ذهبنا من خلال الميكانيكا ورمز الثعبان ل 3 نماذج تجانس الأسي. كما يوضح الجدول أدناه ، أقدم منهجية لاختيار نموذج مناسب لمجموعة البيانات الخاصة بك.

منهجية التجانس الأسي

ملخص لمعاملات التجانس لأشكال المكونات المختلفة لطرق التجانس الأسي.

تجانس المعلمات

التجانس الأسي هو أحد أساليب التنبؤ الأكثر استخدامًا والناجحة في الصناعة في الوقت الحاضر. كيف يمكن التنبؤ بمبيعات التجزئة ، أو وصول السياح ، أو الطلب على الكهرباء ، أو نمو الإيرادات؟ التجانس الأسي هو أحد القوى العظمى التي تحتاجها للكشف عن المستقبل أمامك.