在SPSS中嵌入编程语言优化神经网络预测模型
——以上海市电信业务年度收入预测为例

2024-01-27 04:00
中国新技术新产品 2023年24期
关键词:电信业务编程语言特征选择

胡 琴

(上海邮电设计咨询研究院有限公司,上海 200092)

预测是对未来不确定事件的推测和预计[1],是公司成功兴衰的关键,市场预测能为决策者提供可行性依据,使决策者制定出科学的经营战略[2]。企业进行年度市场规划时,管理决策层除了对各经营指标进行预测外,还需要研究市场的机会增长点,从而将重点资源调配在有增长机会的地方,并通过绩效考核来实现规划目标。

传统预测方法分为时间序列法、回归分析法及指数平滑法等,现代预测方法应用较广泛的有灰色系统预测法、模糊逻辑预测法、人工神经网络法以及组合预测法等[3]。该文对上海市电信业务年度收入进行预测时,利用的是SPSS Statistics中内置的神经网络预测模型,但是其准确性较差,参考指导意义不大。通过在其中嵌入Python编程语言,可优化模型,使均方根误差(RMSE)从最初的19.7提高至12.2。

1 与电信业务年度收入相关的指标探究

作为国民经济中的一个支柱产业,电信业的发展受多方面因素的影响,综合来看,可分为2类,一类是产业内部动力,主要包括电信市场的供需作用、电信技术等;另一类是产业外部动力,即宏观政治经济环境,主要包括经济形势、政策作用等[4]。内部影响指标主要包括历史收入、渗透率、份额和客户评价等,外部影响指标包括GDP、常住人口、户籍人口数、数字经济、第二产业、第三产业以及新兴产业等。内部指标一般不允许公开,具有一定的保密性;外部指标可从上海市统计局或上海统计年鉴中获取。因此该文利用一些容易获取的外部宏观指标对电信业务年度收入进行预测。

所收集的宏观指标与上海市电信业务年度收入的皮尔逊相关性见表1。

表1 上海市相关宏观指标与电信业务年度收入的皮尔逊相关性

该文采用的是有专业机构预测或提前规划的4个宏观指标,即常住人口数、GDP、居民消费价格指数和一般公共预算收入。原始数据见表2。

表2 2001—2022年上海市电信业务年度收入与4个宏观指标

2 上海市电信业务年度收入预测

2.1 使用SPSS中内置的神经网络模型预测

常用的衡量模型预测值与实际值间差异的指标有平均绝对误差(MAE)、均方误差(MSE)、均方根误差(RMSE)和决定系数(R2)。MAE是将差值的绝对值求平均;MSE是预测值与实际值间差值的平方的平均值;RMSE是计算预测值与实际观测值间差异的平方的均值,并取其平方根;R2得分可以评估模型对数据方差的解释能力。与MSE相比,RMSE不仅考虑误差的平方大小,还重视预测误差的绝对大小。因此,RMSE在评估模型拟合程度过程中更直观且易于解释。该文使用的是RMSE。

在SPSS中使用的内置的神经网络模型预测主要有2种,一种为多层感知器,另一种为径向基函数。在多层感知器中,当优化算法为标度共轭梯度时,RMSE=31.0;当优化算法为梯度下降时,RMSE=19.7。在径向基函数中,RMSE=17.8。

在SPSS中直接进行预测和分析的缺点如下:1)灵活性较差。其中的分析方法和功能较固定,无法进行自定义分析和建模。2)适用范围有限。比较适合于传统的统计分析任务,在复杂的数据分析和建模任务中不够灵活和高效。

2.2 在SPSS中嵌入Python语言优化预测模型

SPSS Statistics已具备嵌入编程语言的功能。在SPSS中嵌入编程语言可以给用户带来更大的灵活性,并能进行功能扩展,尤其是分析复杂数据时,用户可以利用嵌入Python的强大功能和库来完成更复杂的分析操作,同时还可以与SPSS的统计分析和数据处理功能进行无缝集成。在SPSS中嵌入Python语言进行建模分析的优点如下:1)灵活性强。Python语言具有强大的编程能力和灵活性,可以进行自定义分析和建模。2)数据处理能力强。Python语言具有丰富的数据处理和分析库,可以完成更复杂的数据分析和建模任务。3)社区支持广泛。Python语言拥有庞大的用户社区和开源库,用户可以充分利用这些资源进行数据分析和建模。

为了优化模型,需要在SPSS中嵌入Python编程语言。优化模型的途径如下:1)模型调参。模型调参是指对模型的参数进行调整,以提高模型的准确性。可以使用sklearn库中的GridSearchCV()函数或RandomizedSearchCV()函数进行模型调参。2)模型集成。模型集成是指将多个模型进行组合,以提高模型的准确性。可以使用sklearn库中的VotingRegressor()函数或StackingRegressor()函数进行模型集成。3)增加模型数量。可以尝试使用更多模型,得出更多的预测结果,从而提升准确度。4)使用其他模型融合方法。可以尝试使用其他模型融合方法,如Stacking等,从而提升准确度。

该文通过Python语言,并采用VotingRegressor将3个MLPRegressor模型进行集成,可得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

# 数据预处理

data = pd.read_csv('D:/论文/使用数据.csv',encoding='UTF-8')

data.drop_duplicates(inplace=True)

data.dropna(inplace=True)

# 特征工程

X = data[['GDP','常住人口数','居民消费价格指数','一般公共预算收入','一般公共预算收入']]

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_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)

# 模型评估

mse = mean_squared_error(y_test,y_pred)

rmse = np.sqrt(mse)

print('RMSE:',rmse)

# 预测

test_data = pd.DataFrame({'GDP': [数值],'常住人口数': [数值],'居民消费价格指数': [数值],'一般公共预算收入': [数值]})

test_data_scaled = scaler.transform(test_data)

test_data_selected = selector.transform(test_data_scaled)

y_pred = grid.predict(test_data_selected)

print('预测收入为:',y_pred[0])

上述代码使用了sklearn库中的MLPRegressor模型来进行收入预测,使用VotingRegressor方法将3个MLPRegressor模型进行了集成,使用了GridSearchCV方法来寻找最优模型参数,从而提升了模型的精确度。其中,数据预处理使用了StandardScaler方法进行标准化,使用了SelectKBest方法进行特征选择。最后,使用训练好的模型对新数据进行预测。

也可以通过Python语言,并使用Stacking来进行模型融合。将MLP和SVR模型进行融合,可得RMSE=13.1。其完整代码如下。

3 结语

作为当前最常用且具有权威性的统计分析软件之一,SPSS对数据进行处理分析时具有不可替代的作用[5]。该文通过在SPSS中嵌入Python语言,成功优化了模型。而Python模型是可以不断进行优化的,具体如下:1)超参数调优。调整模型的超参数(如学习率、正则化参数等)可以改善模型的性能。可以使用网格搜索、随机搜索或贝叶斯优化等方法来寻找最佳超参数组合。2)特征工程。选择、转换或创建新的特征可以改善模型性能。可以使用特征选择方法(如方差阈值、相关性等)、特征转换方法(如标准化、归一化等)或特征生成方法(如多项式特征、交互特征等)来改善模型。3)数据增强。对训练数据进行扩充可以改善模型的泛化能力。可以使用数据增强技术(如旋转、平移和缩放等)来生成更多训练样本。4)模型集成。将多个模型的预测结果进行组合可以改善模型的性能。可以使用投票、平均以及加权等方法来集成多个模型。5)特征选择。选择最相关特征可以减少模型的复杂性和计算成本。可以使用特征选择方法(如方差阈值、相关性等)来选择最相关特征。6)模型压缩。减少模型的大小和计算成本可以提高模型的效率。可以使用模型压缩技术(如剪枝、量化和蒸馏等)来减少模型的大小和计算成本。7)并行计算。通过并行计算可以加速模型的训练和推断过程。可以使用并行计算库(如Multiprocessing、Dask等)来实现并行计算。8)模型缓存。通过缓存模型的计算结果,可以减少重复计算的时间。可以使用缓存库(如joblib、pickle等)来缓存模型的计算结果。

这些方法可以单独或组合使用,以优化模型的性能。具体使用哪种方法取决于问题的性质和数据的特点。

猜你喜欢
电信业务编程语言特征选择
压力-体积转换在CFC编程语言中的实现解析
Java编程语言的特点与应用
浅谈不同编程语言对计算机软件开发的影响
电信业务总量保持高位增长
Kmeans 应用与特征选择
面向对象Web开发编程语言的的评估方法
联合互信息水下目标特征选择算法
2014年7月份通信业经济运行情况
2014年8月份通信业经济运行情况
基于特征选择和RRVPMCD的滚动轴承故障诊断方法