成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

5種用于預測銷售的機器學習技術

人工智能 機器學習
預測銷售是機器學習(ML)的常見且必不可少的用途。預測銷售可用于確定基準并確定新計劃的增量影響,根據預期需求規劃資源以及規劃未來預算。在本文中,我將展示如何實現5種不同的ML模型來預測銷售。

預測銷售是機器學習(ML)的常見且必不可少的用途。預測銷售可用于確定基準并確定新計劃的增量影響,根據預期需求規劃資源以及規劃未來預算。在本文中,我將展示如何實現5種不同的ML模型來預測銷售。

初期準備

首先我們先加載數據并將其轉換為一個結構,然后將其用于每個模型。以原始格式,每一行數據代表十個商店中一天的銷售額。我們的目標是預測月度銷售額,因此我們將首先將所有商店和天數合并為月度總銷售額。

  1. def load_data():   
  2.     return pd.read_csv('D:\Jupyter\dataset\demand-forecasting-kernels-only/train.csv')   
  3.  
  4.  
  5. def monthly_sales(data): 
  6.     monthly_data = data.copy() 
  7.     monthly_datamonthly_data.date = monthly_data.date.apply(lambda x: str(x)[:-3]) 
  8.     monthly_datamonthly_data = monthly_data.groupby('date')['sales'].sum().reset_index() 
  9.     monthly_data.date = pd.to_datetime(monthly_data.date) 
  10.     return monthly_data 
  11.  
  12. monthly_df = monthly_sales(sales_data) 
  13. monthly_df.head() 

5種用于預測銷售的機器學習技術

在我們的新數據框中,每一行現在代表所有商店在給定月份的總銷售額。

5種用于預測銷售的機器學習技術

如果我們繪制隨時間變化的每月總銷售量,我們會看到平均每月銷售量隨時間增加,這意味著我們的數據不是固定的。為了使其平穩,我們將計算每月銷售額之間的差異,并將其作為新列添加到我們的數據框中。

  1. def get_diff(data): 
  2.     data['sales_diff'] = data.sales.diff() 
  3.     datadata = data.dropna() 
  4.      
  5.     data.to_csv('D:/Jupyter/dataset/demand-forecasting-kernels-only/stationary_df.csv') 
  6.     return data 
  7.  
  8. stationary_df = get_diff(monthly_df) 

5種用于預測銷售的機器學習技術

下面是差異轉換前后數據外觀的直觀表示:

5種用于預測銷售的機器學習技術

比較差異前后的平穩性

現在,我們的數據代表了每月的銷售額,并且已經將其轉換為固定值,接下來我們將為不同的模型類型設置數據。為此,我們將定義兩種不同的結構:一種將用于ARIMA建模,另一種將用于其余的模型。

對于我們的Arima模型,我們只需要一個日期時間索引和因變量(銷售額差異)列。

  1. def generate_arima_data(data): 
  2.     dt_data = data.set_index('date').drop('sales', axis=1
  3.     dt_data.dropna(axis=0
  4.      
  5.     dt_data.to_csv('D:/Jupyter/dataset/demand-forecasting-kernels-only/arima_df.csv') 
  6.      
  7.     return dt_data 
  8.  
  9. arima_datetime = generate_arima_data(stationary_df) 

對于其他模型,我們將創建一個新的數據框,其中每個特征代表上個月的銷售額。為了確定在我們的特征集中包含多少個月,我們將觀察自相關和部分自相關圖,并在ARIMA建模中使用選擇滯后時間的規則。這樣,我們就可以為我們的ARIMA和回歸模型保持一致的回顧周期。

5種用于預測銷售的機器學習技術

自相關和局部自相關圖

基于上述情況,我們將選擇回溯期為12個月。因此,我們將生成一個包含13列的數據框,12個月每個月為1列,而我們的因變量即銷售額差異列為第1列。

  1. def generate_supervised(data): 
  2.     supervised_df = data.copy() 
  3.      
  4.     #create column for each lag 
  5.     for i in range(1,13): 
  6.         col_name = 'lag_' + str(i) 
  7.         supervised_df[col_name] = supervised_df['sales_diff'].shift(i) 
  8.      
  9.     #drop null values 
  10.     supervised_dfsupervised_df = supervised_df.dropna().reset_index(drop=True
  11.      
  12.     supervised_df.to_csv('D:/Jupyter/dataset/demand-forecasting-kernels-only/model_df.csv', index=False
  13.      
  14.     return supervised_df 
  15.  
  16. model_df = generate_supervised(stationary_df) 

5種用于預測銷售的機器學習技術

現在我們有兩個獨立的數據結構,一個是Arima結構,它包含一個datetime索引,另一個是監督結構,它包含滯后時間特征。

5種用于預測銷售的機器學習技術

ARIMA和受監督的數據框用于銷售預測

建模

為了創建和評估所有的模型,我們使用了一系列執行以下函數的輔助函數。

  • 訓練、測試、拆分:我們將數據分開,使過去的12個月成為測試集的一部分,其余數據用于訓練我們的模型
  • 縮放數據:使用最小-最大縮放器,我們將縮放數據,以便所有變量都在-1到1的范圍內
  • 反向縮放:運行模型后,我們將使用此輔助函數來反轉步驟2的縮放
  • 創建一個預測數據框:生成一個數據框,其中包括在測試集中捕獲的實際銷售額和模型的預測結果,以便我們能夠量化我們的成功
  • 對模型評分:這個輔助函數將保存我們預測的均方根誤差(RMSE)和均值絕對誤差(MAE),以比較五個模型的性能

1. 回歸模型:線性回歸,隨機森林回歸,XGBoost

對于我們的回歸模型,我們可以使用scikit-learn庫的fit-predict結構。因此,我們可以建立一個基礎建模結構,我們將針對每個模型進行調用。下面的函數調用上面概述的許多輔助函數來拆分數據,運行模型并輸出RMSE和MAE分數。

  1. def regressive_model(train_data, test_data, model, model_name): 
  2.      
  3.     # Call helper functions to create X & y and scale data 
  4.     X_train, y_train, X_test, y_test, scaler_object =  
  5.         scale_data(train_data, test_data) 
  6.      
  7.     # Run regression model 
  8.     mod = model 
  9.     mod.fit(X_train, y_train) 
  10.     predictions = mod.predict(X_test) 
  11.     # Call helper functions to undo scaling & create prediction df 
  12.     original_df = pd.read_csv('D:/Jupyter/dataset/demand-forecasting-kernels-only/train.csv') 
  13.     unscaled = undo_scaling(predictions, X_test, scaler_object) 
  14.     unscaled_df = predict_df(unscaled, original_df) 
  15.     # Call helper functions to print scores and plot results 
  16.     get_scores(unscaled_df, original_df, model_name) 
  17.     plot_results(unscaled_df, original_df, model_name) 
  18.  
  19. # Separate data into train and test sets 
  20. train, test = tts(model_df) 
  21. # Call model frame work for linear regression 
  22. regressive_model(train, test, LinearRegression(),'LinearRegression') 
  23. # Call model frame work for random forest regressor  
  24. regressive_model(train, test,  
  25.                  RandomForestRegressor(n_estimators=100
  26.                                        max_depth=20),         
  27.                                        'RandomForest') 
  28. # Call model frame work for XGBoost 
  29. regressive_model(train, test, XGBRegressor(n_estimators=100
  30.                                            learning_rate=0.2),  
  31.                                            'XGBoost') 

5種用于預測銷售的機器學習技術

下面的輸出顯示了每個回歸模型的預測(紅色)覆蓋在實際銷售(藍色)之上。雖然結果看起來很相似,但細微的差別相當于幾千美元的銷售額,我們將在下面的比較部分中看到。

2. 長短期記憶(LSTM)

LSTM是一種遞歸神經網絡,對于使用順序數據進行預測特別有用。為此,我們將使用非常簡單的LSTM。為了提高準確性,可以添加周期性特征和附加模型復雜性。

  1. def lstm_model(train_data, test_data): 
  2.      
  3.     X_train, y_train, X_test, y_test, scaler_object = scale_data(train_data, test_data) 
  4.      
  5.     X_trainX_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1]) 
  6.     X_testX_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1]) 
  7.     
  8.     model = Sequential() 
  9.     model.add(LSTM(4, batch_input_shape=(1, X_train.shape[1], X_train.shape[2]),  
  10.                    stateful=True)) 
  11.     model.add(Dense(1)) 
  12.     model.add(Dense(1)) 
  13.     model.compile(loss='mean_squared_error'optimizer='adam'
  14.     model.fit(X_train, y_train, epochs=200batch_size=1verbose=1,  
  15.               shuffle=False
  16.     predictions = model.predict(X_test,batch_size=1
  17.      
  18.     original_df = load_original_df() 
  19.     unscaled = undo_scaling(predictions, X_test, scaler_object, lstm=True
  20.     unscaled_df = predict_df(unscaled, original_df) 
  21.      
  22.     get_scores(unscaled_df, original_df, 'LSTM') 
  23.      
  24.     plot_results(unscaled_df, original_df, 'LSTM') 

生成的圖看起來與上面的三個回歸圖相似,因此我們將繼續比較結果,直到我們看到下面的誤差為止。

5種用于預測銷售的機器學習技術

LSTM模型預測與實際銷售額

3. ARIMA

ARIMA模型看起來與上面的模型略有不同。我們使用statsmodels SARIMAX軟件包來訓練模型并生成動態預測。SARIMA模型分為幾個部分。

  • AR:表示為p,是自回歸模型
  • I:用d表示,是微分項
  • MA:表示為q,是移動平均模型
  • S:使我們能夠添加周期性成分

在下面的代碼中,我們定義我們的模型,然后對數據的最后12個月進行動態預測。對于標準的非動態預測,下個月的預測是使用前幾個月的實際銷售額進行的。相反,對于動態預測,使用前幾個月的預測銷售額進行下個月的預測。

  1. def lstm_model(train_data, test_data): 
  2.      
  3.     X_train, y_train, X_test, y_test, scaler_object = scale_data(train_data, test_data) 
  4.      
  5.     X_trainX_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1]) 
  6.     X_testX_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1]) 
  7.     
  8.     model = Sequential() 
  9.     model.add(LSTM(4, batch_input_shape=(1, X_train.shape[1], X_train.shape[2]),  
  10.                    stateful=True)) 
  11.     model.add(Dense(1)) 
  12.     model.add(Dense(1)) 
  13.     model.compile(loss='mean_squared_error'optimizer='adam'
  14.     model.fit(X_train, y_train, epochs=200batch_size=1verbose=1,  
  15.               shuffle=False
  16.     predictions = model.predict(X_test,batch_size=1
  17.      
  18.     original_df = load_original_df() 
  19.     unscaled = undo_scaling(predictions, X_test, scaler_object, lstm=True
  20.     unscaled_df = predict_df(unscaled, original_df) 
  21.      
  22.     get_scores(unscaled_df, original_df, 'LSTM') 
  23.      
  24.     plot_results(unscaled_df, original_df, 'LSTM') 

同樣,結果看起來還不錯。我們將在下面進一步進行挖掘。

5種用于預測銷售的機器學習技術

ARIMA模型預測與實際銷售額

比較模型

為了比較模型性能,我們將查看均方根誤差(RMSE)和均值絕對誤差(MAE)。這些指標通常都用于比較模型性能,但是它們的直覺和數學含義略有不同。

  • MAE:均值絕對誤差告訴我們,我們的預測與真實值之間的距離。在這種情況下,所有誤差的權重都相同。
  • RMSE:我們通過取所有平方誤差之和的平方根來計算RMSE。當我們平方時,較大的誤差對整體誤差有較大的影響,而較小的誤差對整體誤差沒有太大的影響。

從上面的輔助函數中,我們使用get_scores計算每個模型的RMSE和MAE分數。這些分數保存在字典中并保存起來。為了進行比較,我們將把字典轉換成Pandas數據框并繪制結果。

  1. def create_results_df(): 
  2.     results_dict = pickle.load(open("model_scores.p", "rb")) 
  3.      
  4.     results_dict.update(pickle.load(open("arima_model_scores.p", "rb"))) 
  5.      
  6.     restults_df = pd.DataFrame.from_dict(results_dict, orient='index',  
  7.                                         columns=['RMSE', 'MAE','R2']) 
  8.      
  9.     restults_dfrestults_df = restults_df.sort_values(by='RMSE'ascending=False).reset_index() 
  10.      
  11.     return restults_df 
  12.  
  13. results = create_results_df() 

這為我們提供了以下數據框。

我們可以看到,盡管我們的模型輸出在上圖中看起來相似,但它們的準確度確實有所不同。下面是可以幫助我們看到差異的視覺效果。

5種用于預測銷售的機器學習技術

比較模型性能

結論

我們看到的是,總體而言,XGBoost模型具有最佳性能,緊隨其后的是ARIMA和LSTM模型。需要注意的是,以上所有模型都是以其最基本的形式衍生的,以演示如何將其用于銷售預測。僅對模型進行了微調,以最大程度地減少復雜性。例如,LSTM可以具有許多其他節點和層以提高性能。

要確定哪種模型適合您的用例,應考慮以下內容:

  • 模型復雜度與可解釋性的程度。
  • 可以調整模型,并可以對函數進行設計以包括周期性信息,節假日,周末等。
  • 了解如何使用結果以及如何輸入數據來更新模型。
  • 使用交叉驗證或類似技術來調整模型,以避免數據過度擬合。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2016-12-28 15:19:22

大數據機器學習銷售預測

2017-07-25 12:09:10

機器學習預測性維護模型

2020-06-05 08:09:01

Python強化學習框架

2021-04-01 22:19:54

機器學習模型數據

2024-07-10 14:25:20

2020-06-10 07:46:39

機器學習預測性維護工業物聯網

2018-09-15 23:23:04

Web開發機器學習軟件開發

2020-04-29 16:49:33

機器學習人工智能計算機

2020-11-10 10:41:07

云計算機器學習人工智能

2018-05-04 08:20:39

機器學習深度學習人工智能

2018-06-27 10:44:55

云計算買家云平臺

2018-08-30 14:58:12

機器學習磁盤故障

2022-08-14 16:04:15

機器學習數據集算法

2020-12-28 08:43:56

機器學習文本注解工具人工智能

2021-03-12 11:00:14

機器學習人工智能爬坡測試

2020-08-19 09:20:00

機器學習人工智能Python

2021-03-04 12:40:25

機器學習人工智能爬坡測試

2024-03-26 09:23:22

自動駕駛軌跡

2018-06-04 10:58:46

機器學習預測應用API

2019-07-29 14:03:07

JavaScriptweb網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一二三区在线观看 | 成人av电影天堂 | 中文字幕亚洲免费 | 亚洲欧洲一区二区 | 成人av免费 | 久久精品一区二区 | 成人欧美日韩一区二区三区 | 欧美激情一区二区三区 | 国产精品一区二区三区在线播放 | 国产网站在线播放 | 欧美成人免费在线视频 | 久久婷婷香蕉热狠狠综合 | 亚洲国产中文字幕 | 国产乱码精品一区二区三区五月婷 | 久久不卡 | 国产一区二区在线播放视频 | 亚洲女人的天堂 | 精品久久av| 国产欧美在线观看 | 欧美性影院 | aaa精品| 色秀网站| 开操网| 欧美日韩免费视频 | 最新日韩在线 | 国产精品亚洲视频 | 久久国产精品视频 | 九九热免费在线观看 | 99精品欧美一区二区三区 | 香蕉一区二区 | 国产精品美女久久久av超清 | 日本韩国电影免费观看 | 九九热九九 | 欧美国产日韩精品 | 国产一区二区欧美 | 亚洲一区二区中文字幕在线观看 | 久久精品在线播放 | 91视频在线 | 国产精品午夜电影 | 精品国产乱码一区二区三区a | 黄色成人国产 |