胡 琴
(上海郵電設(shè)計(jì)咨詢研究院有限公司,上海 200092)
預(yù)測(cè)是對(duì)未來不確定事件的推測(cè)和預(yù)計(jì)[1],是公司成功興衰的關(guān)鍵,市場(chǎng)預(yù)測(cè)能為決策者提供可行性依據(jù),使決策者制定出科學(xué)的經(jīng)營戰(zhàn)略[2]。企業(yè)進(jìn)行年度市場(chǎng)規(guī)劃時(shí),管理決策層除了對(duì)各經(jīng)營指標(biāo)進(jìn)行預(yù)測(cè)外,還需要研究市場(chǎng)的機(jī)會(huì)增長點(diǎn),從而將重點(diǎn)資源調(diào)配在有增長機(jī)會(huì)的地方,并通過績(jī)效考核來實(shí)現(xiàn)規(guī)劃目標(biāo)。
傳統(tǒng)預(yù)測(cè)方法分為時(shí)間序列法、回歸分析法及指數(shù)平滑法等,現(xiàn)代預(yù)測(cè)方法應(yīng)用較廣泛的有灰色系統(tǒng)預(yù)測(cè)法、模糊邏輯預(yù)測(cè)法、人工神經(jīng)網(wǎng)絡(luò)法以及組合預(yù)測(cè)法等[3]。該文對(duì)上海市電信業(yè)務(wù)年度收入進(jìn)行預(yù)測(cè)時(shí),利用的是SPSS Statistics中內(nèi)置的神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,但是其準(zhǔn)確性較差,參考指導(dǎo)意義不大。通過在其中嵌入Python編程語言,可優(yōu)化模型,使均方根誤差(RMSE)從最初的19.7提高至12.2。
作為國民經(jīng)濟(jì)中的一個(gè)支柱產(chǎn)業(yè),電信業(yè)的發(fā)展受多方面因素的影響,綜合來看,可分為2類,一類是產(chǎn)業(yè)內(nèi)部動(dòng)力,主要包括電信市場(chǎng)的供需作用、電信技術(shù)等;另一類是產(chǎn)業(yè)外部動(dòng)力,即宏觀政治經(jīng)濟(jì)環(huán)境,主要包括經(jīng)濟(jì)形勢(shì)、政策作用等[4]。內(nèi)部影響指標(biāo)主要包括歷史收入、滲透率、份額和客戶評(píng)價(jià)等,外部影響指標(biāo)包括GDP、常住人口、戶籍人口數(shù)、數(shù)字經(jīng)濟(jì)、第二產(chǎn)業(yè)、第三產(chǎn)業(yè)以及新興產(chǎn)業(yè)等。內(nèi)部指標(biāo)一般不允許公開,具有一定的保密性;外部指標(biāo)可從上海市統(tǒng)計(jì)局或上海統(tǒng)計(jì)年鑒中獲取。因此該文利用一些容易獲取的外部宏觀指標(biāo)對(duì)電信業(yè)務(wù)年度收入進(jìn)行預(yù)測(cè)。
所收集的宏觀指標(biāo)與上海市電信業(yè)務(wù)年度收入的皮爾遜相關(guān)性見表1。
表1 上海市相關(guān)宏觀指標(biāo)與電信業(yè)務(wù)年度收入的皮爾遜相關(guān)性
該文采用的是有專業(yè)機(jī)構(gòu)預(yù)測(cè)或提前規(guī)劃的4個(gè)宏觀指標(biāo),即常住人口數(shù)、GDP、居民消費(fèi)價(jià)格指數(shù)和一般公共預(yù)算收入。原始數(shù)據(jù)見表2。
表2 2001—2022年上海市電信業(yè)務(wù)年度收入與4個(gè)宏觀指標(biāo)
常用的衡量模型預(yù)測(cè)值與實(shí)際值間差異的指標(biāo)有平均絕對(duì)誤差(MAE)、均方誤差(MSE)、均方根誤差(RMSE)和決定系數(shù)(R2)。MAE是將差值的絕對(duì)值求平均;MSE是預(yù)測(cè)值與實(shí)際值間差值的平方的平均值;RMSE是計(jì)算預(yù)測(cè)值與實(shí)際觀測(cè)值間差異的平方的均值,并取其平方根;R2得分可以評(píng)估模型對(duì)數(shù)據(jù)方差的解釋能力。與MSE相比,RMSE不僅考慮誤差的平方大小,還重視預(yù)測(cè)誤差的絕對(duì)大小。因此,RMSE在評(píng)估模型擬合程度過程中更直觀且易于解釋。該文使用的是RMSE。
在SPSS中使用的內(nèi)置的神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)主要有2種,一種為多層感知器,另一種為徑向基函數(shù)。在多層感知器中,當(dāng)優(yōu)化算法為標(biāo)度共軛梯度時(shí),RMSE=31.0;當(dāng)優(yōu)化算法為梯度下降時(shí),RMSE=19.7。在徑向基函數(shù)中,RMSE=17.8。
在SPSS中直接進(jìn)行預(yù)測(cè)和分析的缺點(diǎn)如下:1)靈活性較差。其中的分析方法和功能較固定,無法進(jìn)行自定義分析和建模。2)適用范圍有限。比較適合于傳統(tǒng)的統(tǒng)計(jì)分析任務(wù),在復(fù)雜的數(shù)據(jù)分析和建模任務(wù)中不夠靈活和高效。
SPSS Statistics已具備嵌入編程語言的功能。在SPSS中嵌入編程語言可以給用戶帶來更大的靈活性,并能進(jìn)行功能擴(kuò)展,尤其是分析復(fù)雜數(shù)據(jù)時(shí),用戶可以利用嵌入Python的強(qiáng)大功能和庫來完成更復(fù)雜的分析操作,同時(shí)還可以與SPSS的統(tǒng)計(jì)分析和數(shù)據(jù)處理功能進(jìn)行無縫集成。在SPSS中嵌入Python語言進(jìn)行建模分析的優(yōu)點(diǎn)如下:1)靈活性強(qiáng)。Python語言具有強(qiáng)大的編程能力和靈活性,可以進(jìn)行自定義分析和建模。2)數(shù)據(jù)處理能力強(qiáng)。Python語言具有豐富的數(shù)據(jù)處理和分析庫,可以完成更復(fù)雜的數(shù)據(jù)分析和建模任務(wù)。3)社區(qū)支持廣泛。Python語言擁有龐大的用戶社區(qū)和開源庫,用戶可以充分利用這些資源進(jìn)行數(shù)據(jù)分析和建模。
為了優(yōu)化模型,需要在SPSS中嵌入Python編程語言。優(yōu)化模型的途徑如下:1)模型調(diào)參。模型調(diào)參是指對(duì)模型的參數(shù)進(jìn)行調(diào)整,以提高模型的準(zhǔn)確性??梢允褂胹klearn庫中的GridSearchCV()函數(shù)或RandomizedSearchCV()函數(shù)進(jìn)行模型調(diào)參。2)模型集成。模型集成是指將多個(gè)模型進(jìn)行組合,以提高模型的準(zhǔn)確性。可以使用sklearn庫中的VotingRegressor()函數(shù)或StackingRegressor()函數(shù)進(jìn)行模型集成。3)增加模型數(shù)量。可以嘗試使用更多模型,得出更多的預(yù)測(cè)結(jié)果,從而提升準(zhǔn)確度。4)使用其他模型融合方法??梢試L試使用其他模型融合方法,如Stacking等,從而提升準(zhǔn)確度。
該文通過Python語言,并采用VotingRegressor將3個(gè)MLPRegressor模型進(jìn)行集成,可得RMSE=12.2。其完整代碼如下。
# !/usr/bin/env python
import pandas as pd
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest,f_regression
from sklearn.ensemble import VotingRegressor
from sklearn.metrics import mean_squared_error
# 數(shù)據(jù)預(yù)處理
data = pd.read_csv('D:/論文/使用數(shù)據(jù).csv',encoding='UTF-8')
data.drop_duplicates(inplace=True)
data.dropna(inplace=True)
# 特征工程
X = data[['GDP','常住人口數(shù)','居民消費(fèi)價(jià)格指數(shù)','一般公共預(yù)算收入','一般公共預(yù)算收入']]
y = data['收入']
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
selector = SelectKBest(f_regression,k=2)
X_selected = selector.fit_transform(X_scaled,y)
# 模型訓(xùn)練
X_train,X_test,y_train,y_test = train_test_split(X_selected,y,test_size=0.2,random_state=0)
model1 = MLPRegressor(hidden_layer_sizes=(10,),activation='logistic',solver='lbfgs')
model2 = MLPRegressor(hidden_layer_sizes=(20,),activation='logistic',solver='lbfgs')
model3 = MLPRegressor(hidden_layer_sizes=(30,),activation='logistic',solver='lbfgs')
model = VotingRegressor([('model1',model1),('model2',model2),('model3',model3)])
params = {'model1__alpha': [0.0001,0.001,0.01],'model2__alpha': [0.0001,0.001,0.01],'model3__alpha':[0.0001,0.001,0.01]}
grid = GridSearchCV(model,params,cv=5)
grid.fit(X_train,y_train)
y_pred = grid.predict(X_test)
# 模型評(píng)估
mse = mean_squared_error(y_test,y_pred)
rmse = np.sqrt(mse)
print('RMSE:',rmse)
# 預(yù)測(cè)
test_data = pd.DataFrame({'GDP': [數(shù)值],'常住人口數(shù)': [數(shù)值],'居民消費(fèi)價(jià)格指數(shù)': [數(shù)值],'一般公共預(yù)算收入': [數(shù)值]})
test_data_scaled = scaler.transform(test_data)
test_data_selected = selector.transform(test_data_scaled)
y_pred = grid.predict(test_data_selected)
print('預(yù)測(cè)收入為:',y_pred[0])
上述代碼使用了sklearn庫中的MLPRegressor模型來進(jìn)行收入預(yù)測(cè),使用VotingRegressor方法將3個(gè)MLPRegressor模型進(jìn)行了集成,使用了GridSearchCV方法來尋找最優(yōu)模型參數(shù),從而提升了模型的精確度。其中,數(shù)據(jù)預(yù)處理使用了StandardScaler方法進(jìn)行標(biāo)準(zhǔn)化,使用了SelectKBest方法進(jìn)行特征選擇。最后,使用訓(xùn)練好的模型對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。
也可以通過Python語言,并使用Stacking來進(jìn)行模型融合。將MLP和SVR模型進(jìn)行融合,可得RMSE=13.1。其完整代碼如下。
作為當(dāng)前最常用且具有權(quán)威性的統(tǒng)計(jì)分析軟件之一,SPSS對(duì)數(shù)據(jù)進(jìn)行處理分析時(shí)具有不可替代的作用[5]。該文通過在SPSS中嵌入Python語言,成功優(yōu)化了模型。而Python模型是可以不斷進(jìn)行優(yōu)化的,具體如下:1)超參數(shù)調(diào)優(yōu)。調(diào)整模型的超參數(shù)(如學(xué)習(xí)率、正則化參數(shù)等)可以改善模型的性能。可以使用網(wǎng)格搜索、隨機(jī)搜索或貝葉斯優(yōu)化等方法來尋找最佳超參數(shù)組合。2)特征工程。選擇、轉(zhuǎn)換或創(chuàng)建新的特征可以改善模型性能。可以使用特征選擇方法(如方差閾值、相關(guān)性等)、特征轉(zhuǎn)換方法(如標(biāo)準(zhǔn)化、歸一化等)或特征生成方法(如多項(xiàng)式特征、交互特征等)來改善模型。3)數(shù)據(jù)增強(qiáng)。對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行擴(kuò)充可以改善模型的泛化能力??梢允褂脭?shù)據(jù)增強(qiáng)技術(shù)(如旋轉(zhuǎn)、平移和縮放等)來生成更多訓(xùn)練樣本。4)模型集成。將多個(gè)模型的預(yù)測(cè)結(jié)果進(jìn)行組合可以改善模型的性能。可以使用投票、平均以及加權(quán)等方法來集成多個(gè)模型。5)特征選擇。選擇最相關(guān)特征可以減少模型的復(fù)雜性和計(jì)算成本。可以使用特征選擇方法(如方差閾值、相關(guān)性等)來選擇最相關(guān)特征。6)模型壓縮。減少模型的大小和計(jì)算成本可以提高模型的效率??梢允褂媚P蛪嚎s技術(shù)(如剪枝、量化和蒸餾等)來減少模型的大小和計(jì)算成本。7)并行計(jì)算。通過并行計(jì)算可以加速模型的訓(xùn)練和推斷過程??梢允褂貌⑿杏?jì)算庫(如Multiprocessing、Dask等)來實(shí)現(xiàn)并行計(jì)算。8)模型緩存。通過緩存模型的計(jì)算結(jié)果,可以減少重復(fù)計(jì)算的時(shí)間??梢允褂镁彺鎺欤ㄈ鏹oblib、pickle等)來緩存模型的計(jì)算結(jié)果。
這些方法可以單獨(dú)或組合使用,以優(yōu)化模型的性能。具體使用哪種方法取決于問題的性質(zhì)和數(shù)據(jù)的特點(diǎn)。