iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1
AI & Data

飛哥與小博的30天-統計與機器學習成長日記系列 第 16

[DAY 16] 章節2-10: 通心丸的購買量-卜瓦松回歸(Pyhton)

  • 分享至 

  • xImage
  •  

人物介紹: 士心協理

在銷售管理部門小有成就,平常多訂定製程的相關標準。在公司內的綽號是「和事佬」,個性較沉默,總是默默協調各部門的紛爭,讓雙方都能有個滿意的結果。興趣是手做料理,總能讓不同領域的味道呈現新滋味,修經理常被當成專屬試吃員。

2-10 通心丸的購買量

「啊~~睡的真飽。」小博打了個哈欠並伸伸懶腰,一旁的士心協理拿了顆晶瑩剔透的藥丸給小博,瞇著眼笑著說道:「來!這顆給你提提神吧,是本公司熱銷的產品『通心丸』。」,疑惑之間,小博略帶遲疑的含在口中,不一會兒,薄荷跟香草帶著些許的甘甜提振了午後的精神。

「好神奇喔!這個也太好吃了吧!」小博對於這顆藥丸很感興趣。

飛哥說道:「這東西挺有意思的啊!」,士心協理微笑說著:「本公司不只研發安眠藥,對於提振精神的藥物也是頗有研究呢!剛剛吃的那個雖然不是藥物,但它的成份經證實對提振精神是有益處的,不會對身體造成負擔喔!」。

「不過本公司對消費者購買的數量倒希望能研究研究,之前第一線銷售人員總覺得下雨天的銷售量較好,想請您協助看看是否真的如此,這是今年7、8月的銷售量。」士心遞出了一份文件。
https://ithelp.ithome.com.tw/upload/images/20201001/20130640xxI8lIYfvx.png

飛哥分析一番後,點了點頭說道:「就模型上,因為每個出貨的箱數是非負整數值,因此我會使用『卜瓦松回歸(Poisson Regression)』進行分析,你看下圖對於每周的銷售箱數擬合的還不錯
https://ithelp.ithome.com.tw/upload/images/20201001/20130640PvCopuDf4G.png

模型的部分可以寫成
salesvolume=exp(month×0.4065+week×0.2023+rainyday×0.027)

第一線人員提到的雨天也確實達到統計上的顯著,或許可以朝著為何雨天會讓通心丸的銷售額提升做下一步的調查規劃,但是另一部分要注意的是,雨天的係數較小,比月份、週數的0.4065和0.2023都小的多,所以說雖然顯著,但並不一定是導致銷售箱數提升的主因。」

「了解,感謝飛先生提出的見解,這個部份我事後會再調查,雨天的部分我猜想可能天氣不好導致人心情鬱悶吧!但或許提升他人購買的意願不是很大,我會再看看有無重要的因素還沒納進來的,感謝您。」士心協理禮貌地回覆剛剛飛哥的分析。

B董在一旁看似很滿意,說著:「感謝你幫忙本公司解決許多問題啊,待會我請秘書把這次的費用算給你,齁齁,剩下這幾天你就隨意到新加坡逛逛吧!若旅途中有需要幫忙的地方,隨時聯繫」

「沒問題,謝謝阿倫兄的幫忙啊!那我們就先走一步啦!」飛哥揮手示意小博跟上,小博拿起背包快速移動到飛哥身邊。


Python程式時間

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

data={'sales_volume':[25,32,48,26,31,58,64,73],
      'month':[7,7,7,7,8,8,8,8],
      'week':[1,2,3,4,1,2,3,4],
      'rainy_day':[2,13,7,1,3,15,12,3]    
}
data=pd.DataFrame(data)
data=data[['sales_volume','month','week','rainy_day']]

y_train=data['sales_volume']

X_train=data[['month','week','rainy_day']]

#Using the statsmodels GLM class, train the Poisson regression model on the training data set.
poisson_training_results = sm.GLM(y_train, X_train, family=sm.families.Poisson()).fit()
print(poisson_training_results.summary())

poisson_predictions = poisson_training_results.get_prediction(X_train)
#.summary_frame() returns a pandas DataFrame
predictions_summary_frame = poisson_predictions.summary_frame()
print(predictions_summary_frame) # 輸出預測值

# 畫出趨勢圖
fig = plt.figure()
fig.suptitle('Sales volume in July, August')
predicted, = plt.plot(y_train.index, predictions_summary_frame['mean'], 'go-', label='Predicted counts')
actual, = plt.plot(y_train.index, data['sales_volume'], 'ro-', label='Actual counts')
plt.legend(handles=[predicted, actual])
plt.show()

後記:有人會覺得卜瓦松回歸只是線性回歸的變形而已,就模型的型態而言確實有些相像,連最後要回推結果也只是log、exp交互替換而已,但每種資料都有其特性,可能分布不同使用的方法就不同,有些方法則是某種理論的條件限定版本,因此雖然侷限性較高,但卜瓦松回歸還是對計數型資料有較高的適用性。

資料參考:
https://towardsdatascience.com/an-illustrated-guide-to-the-poisson-regression-model-50cccba15958


上一篇
[DAY 15] 統計雜談: 午間斜陽-統計有甚麼用?
下一篇
[DAY 17] 章節2-11: 流感再現-時間序列分析(1/3)
系列文
飛哥與小博的30天-統計與機器學習成長日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言