第五届工业互联网大数据:配件需求29th方案与代码
背景
大數(shù)據(jù)可能過(guò)時(shí)了,所以這個(gè)延續(xù)5年的比賽也換了名字,但我還是習(xí)慣叫工業(yè)大數(shù)據(jù)。之前文章介紹過(guò),我做了風(fēng)力預(yù)測(cè)賽道但排不進(jìn)排行榜。這里介紹一下隊(duì)友在配件預(yù)測(cè)賽道的方案,方案很簡(jiǎn)單,不到50行代碼,取得決賽29th的成績(jī)。其實(shí),我也做了一點(diǎn),入手了一個(gè)LGB模型,但是效果一直沒(méi)有超過(guò)全0,尷尬的放棄了。
任務(wù)是預(yù)測(cè)未來(lái)三個(gè)月的配件需求,評(píng)價(jià)指標(biāo)類(lèi)似MAPE,所以準(zhǔn)確預(yù)測(cè)小目標(biāo)才是關(guān)鍵。
代碼地址:https://github.com/hongyingyue/Data-science-demos
方案
##第1個(gè)月
第1個(gè)月使用VAR模型。由于零件中有很多的銷(xiāo)量非常稀疏,增加一個(gè)后處理,將48個(gè)月均銷(xiāo)量小于1的零件銷(xiāo)量直接調(diào)整為0。
import pandas as pd import numpy as npfrom statsmodels.tsa.vector_ar.var_model import VAR from sklearn.linear_model import LinearRegression from statsmodels.tsa.deterministic import DeterministicProcess# VAR v_model = VAR(ts_df) v_model_fit = v_model.fit(3) lag_order = v_model_fit.k_ar# forecast for the 1st month y_fore1 = v_model_fit.forecast(ts_df.values[-lag_order:], 1) y_fore1[y_fore1 < 0] = 0第2/3個(gè)月
第2-3月使用線(xiàn)性回歸模型,這里的特征是超出我預(yù)料的。只使用了月份還有月份的平方作為特征,直接用線(xiàn)性模型預(yù)測(cè)結(jié)果。
# LR model y = ts_df.copy()# Create trend features dp = DeterministicProcess(index=y.index, # dates from the training dataconstant=True, # the interceptorder=2, # quadratic trenddrop=True, # drop terms to avoid collinearity ) X = dp.in_sample() # features for the training data X_fore = dp.out_of_sample(steps=3)X['mon']=X.index.month X_fore.set_index([pd.to_datetime(['2020-7-1','2020-8-1','2020-9-1'])],inplace=True) X_fore['mon']=X_fore.index.month# Fit trend model model = LinearRegression(fit_intercept=False) model.fit(X, y)y_fore_l = pd.DataFrame(model.predict(X_fore),index=X_fore.index,columns=y.columns, ) y_fore_l[y_fore_l<0] = 0以上就是吊打我方案的全部代碼了,非常簡(jiǎn)單高效。數(shù)據(jù)量比較小,評(píng)價(jià)指標(biāo)不是很合理,就要根據(jù)數(shù)據(jù)和指標(biāo)多做些針對(duì)性的調(diào)整了,希望下一屆能取的好成績(jī)。
我是YueTan,謝謝關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的第五届工业互联网大数据:配件需求29th方案与代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 代码 点到线段的最短距离
- 下一篇: Jsp和Servlet有什么区别?