Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預測分析|附代碼數(shù)據(jù)
全文下載鏈接:http://tecdat.cn/?p=17748
最近我們被客戶要求撰寫關于銷售量時間序列建模預測的研究報告,包括一些圖形和統(tǒng)計輸出。
在本文中,在數(shù)據(jù)科學學習之旅中,我經(jīng)常處理日常工作中的時間序列數(shù)據(jù)集,并據(jù)此做出預測 。
LSTM神經(jīng)網(wǎng)絡架構和原理及其在Python中的預測應用
我將通過以下步驟:
探索性數(shù)據(jù)分析(EDA)
問題定義(我們要解決什么)
變量識別(我們擁有什么數(shù)據(jù))
單變量分析(了解數(shù)據(jù)集中的每個字段)
多元分析(了解不同領域和目標之間的相互作用)
缺失值處理
離群值處理
變量轉換
預測建模
LSTM
XGBoost
問題定義
我們在兩個不同的表中提供了商店的以下信息:
商店:每個商店的ID
銷售:特定日期的營業(yè)額(我們的目標變量)
客戶:特定日期的客戶數(shù)量
StateHoliday:假日
SchoolHoliday:學校假期
StoreType:4個不同的商店:a,b,c,d
CompetitionDistance:到最近的競爭對手商店的距離(以米為單位)
CompetitionOpenSince?[月/年]:提供最近的競爭對手開放的大致年份和月份
促銷:當天促銷與否
Promo2:Promo2是某些商店的連續(xù)和連續(xù)促銷:0 =商店不參與,1 =商店正在參與
PromoInterval:描述促銷啟動的連續(xù)區(qū)間,并指定重新開始促銷的月份。
利用所有這些信息,我們預測未來6周的銷售量。
#?讓我們導入EDA所需的庫:import?numpy?as?np?#?線性代數(shù)import?pandas?as?pd?#?數(shù)據(jù)處理,CSV文件I?/?O導入(例如pd.read_csv)import?matplotlib.pyplot?as?pltimport?seaborn?as?snsfrom?datetime?import?datetime
plt.style.use("ggplot")?#?繪圖#導入訓練和測試文件:train_df?=?pd.read_csv("../Data/train.csv")
test_df?=?pd.read_csv("../Data/test.csv")#文件中有多少數(shù)據(jù):print("在訓練集中,我們有",?train_df.shape[0],?"個觀察值和",?train_df.shape[1],?列/變量。")
print("在測試集中,我們有",?test_df.shape[0],?"個觀察值和",?test_df.shape[1],?"列/變量。")
print("在商店集中,我們有",?store_df.shape[0],?"個觀察值和",?store_df.shape[1],?"列/變量。")
在訓練集中,我們有1017209個觀察值和9列/變量。
在測試集中,我們有41088個觀測值和8列/變量。
在商店集中,我們有1115個觀察值和10列/變量。
首先讓我們清理??訓練數(shù)據(jù)集。
#查看數(shù)據(jù)train_df.head().append(train_df.tail())?#顯示前5行。

train_df.isnull().all()Out[5]:
Store????????????FalseDayOfWeek????????FalseDate?????????????FalseSales????????????FalseCustomers????????FalseOpen?????????????FalsePromo????????????FalseStateHoliday?????FalseSchoolHoliday????Falsedtype:?bool
讓我們從第一個變量開始->??銷售量
opened_sales?=?(train_df[(train_df.Open?==?1)?#如果商店開業(yè)opened_sales.Sales.describe()Out[6]:count????422307.000000mean???????6951.782199std????????3101.768685min?????????133.00000025%????????4853.00000050%????????6367.00000075%????????8355.000000max???????41551.000000Name:?Sales,?dtype:?float64<matplotlib.axes._subplots.AxesSubplot?at?0x7f7c38fa6588>

看一下顧客變量
In?[9]:
train_df.Customers.describe()
Out[9]:
count????1.017209e+06mean?????6.331459e+02std??????4.644117e+02min??????0.000000e+0025%??????4.050000e+0250%??????6.090000e+0275%??????8.370000e+02max??????7.388000e+03Name:?Customers,?dtype:?float64
<matplotlib.axes._subplots.AxesSubplot?at?0x7f7c3565d240>

train_df[(train_df.Customers?>?6000)]

我們看一下**假期**?變量。
train_df.StateHoliday.value_counts()
0????8550870????131072a?????20260b??????6690c??????4100Name:?StateHoliday,?dtype:?int64
train_df.StateHoliday_cat.count()
1017209
train_df.tail()

train_df.isnull().all()?#檢查缺失Out[18]:
Store???????????????FalseDayOfWeek???????????FalseDate????????????????FalseSales???????????????FalseCustomers???????????FalseOpen????????????????FalsePromo???????????????FalseSchoolHoliday???????FalseStateHoliday_cat????Falsedtype:?bool
讓我們繼續(xù)進行商店分析
store_df.head().append(store_df.tail())

#缺失數(shù)據(jù):Store?????????????????????????0.000000
StoreType?????????????????????0.000000
Assortment????????????????????0.000000
CompetitionDistance???????????0.269058
CompetitionOpenSinceMonth????31.748879
CompetitionOpenSinceYear?????31.748879
Promo2????????????????????????0.000000
Promo2SinceWeek??????????????48.789238
Promo2SinceYear??????????????48.789238
PromoInterval????????????????48.789238
dtype:?float64
In?[21]:
讓我們從缺失的數(shù)據(jù)開始。第一個是?CompetitionDistance
store_df.CompetitionDistance.plot.box()
讓我看看異常值,因此我們可以在均值和中位數(shù)之間進行選擇來填充NaN

點擊標題查閱往期內容

Python中利用長短期記憶模型LSTM進行時間序列預測分析 - 預測電力負荷數(shù)據(jù)

左右滑動查看更多

01

02

03

04

缺少數(shù)據(jù),因為商店沒有競爭。?因此,我建議用零填充缺失的值。
store_df["CompetitionOpenSinceMonth"].fillna(0,?inplace?=?True)
讓我們看一下促銷活動。
store_df.groupby(by?=?"Promo2",?axis?=?0).count()

如果未進行促銷,則應將“促銷”中的NaN替換為零?
我們合并商店數(shù)據(jù)和訓練集數(shù)據(jù),然后繼續(xù)進行分析。
第一,讓我們按銷售量、客戶等比較商店。
f,?ax?=?plt.subplots(2,?3,?figsize?=?(20,10))
plt.subplots_adjust(hspace?=?0.3)
plt.show()

從圖中可以看出,StoreType A擁有最多的商店,銷售和客戶。但是,StoreType D的平均每位客戶平均支出最高。只有17家商店的StoreType B擁有最多的平均顧客。
我們逐年查看趨勢。
sns.factorplot(data?=?train_store_df,?#?我們可以看到季節(jié)性,但看不到趨勢。?該銷售額每年保持不變<seaborn.axisgrid.FacetGrid?at?0x7f7c350e0c50>


我們看一下相關圖。
??"CompetitionOpenSinceMonth",?"CompetitionOpenSinceYear",?"Promo2
<matplotlib.axes._subplots.AxesSubplot?at?0x7f7c33d79c18>

我們可以得到相關性:
客戶與銷售(0.82)
促銷與銷售(0,82)
平均顧客銷量 vs促銷(0,28)
商店類別 vs 平均顧客銷量 (0,44)
我的分析結論:
商店類別 A擁有最多的銷售和顧客。
商店類別 B的每位客戶平均銷售額最低。因此,我認為客戶只為小商品而來。
商店類別 D的購物車數(shù)量最多。
促銷僅在工作日進行。
客戶傾向于在星期一(促銷)和星期日(沒有促銷)購買更多商品。
我看不到任何年度趨勢。僅季節(jié)性模式。

點擊文末?“閱讀原文”
獲取全文完整代碼數(shù)據(jù)資料。
本文選自《Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預測分析》。
點擊標題查閱往期內容
Matlab用深度學習長短期記憶(LSTM)神經(jīng)網(wǎng)絡對文本數(shù)據(jù)進行分類
RNN循環(huán)神經(jīng)網(wǎng)絡 、LSTM長短期記憶網(wǎng)絡實現(xiàn)時間序列長期利率預測
結合新冠疫情COVID-19股票價格預測:ARIMA,KNN和神經(jīng)網(wǎng)絡時間序列分析
深度學習:Keras使用神經(jīng)網(wǎng)絡進行簡單文本分類分析新聞組數(shù)據(jù)
用PyTorch機器學習神經(jīng)網(wǎng)絡分類預測銀行客戶流失模型
PYTHON用LSTM長短期記憶神經(jīng)網(wǎng)絡的參數(shù)優(yōu)化方法預測時間序列洗發(fā)水銷售數(shù)據(jù)
Python用Keras神經(jīng)網(wǎng)絡序列模型回歸擬合預測、準確度檢查和結果可視化
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡對不穩(wěn)定降雨量時間序列進行預測分析
R語言中的神經(jīng)網(wǎng)絡預測時間序列:多層感知器(MLP)和極限學習機(ELM)數(shù)據(jù)分析報告
R語言深度學習:用keras神經(jīng)網(wǎng)絡回歸模型預測時間序列數(shù)據(jù)
Matlab用深度學習長短期記憶(LSTM)神經(jīng)網(wǎng)絡對文本數(shù)據(jù)進行分類
R語言KERAS深度學習CNN卷積神經(jīng)網(wǎng)絡分類識別手寫數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡預測人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機器學習神經(jīng)網(wǎng)絡分類預測銀行客戶流失模型
R語言實現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡)模型進行回歸數(shù)據(jù)分析
SAS使用鳶尾花(iris)數(shù)據(jù)集訓練人工神經(jīng)網(wǎng)絡(ANN)模型
【視頻】R語言實現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡)模型進行回歸數(shù)據(jù)分析
Python使用神經(jīng)網(wǎng)絡進行簡單文本分類
R語言用神經(jīng)網(wǎng)絡改進Nelson-Siegel模型擬合收益率曲線分析
R語言基于遞歸神經(jīng)網(wǎng)絡RNN的溫度時間序列預測
R語言神經(jīng)網(wǎng)絡模型預測車輛數(shù)量時間序列
R語言中的BP神經(jīng)網(wǎng)絡模型分析學生成績
matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡對序列數(shù)據(jù)進行分類
R語言實現(xiàn)擬合神經(jīng)網(wǎng)絡預測和結果可視化
用R語言實現(xiàn)神經(jīng)網(wǎng)絡預測股票實例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡進行時間序列預測
python用于NLP的seq2seq模型實例:用Keras實現(xiàn)神經(jīng)網(wǎng)絡機器翻譯
用于NLP的Python:使用Keras的多標簽文本LSTM神經(jīng)網(wǎng)絡分類