当前位置: 首页 > 后端技术 > Python

Python多项式预测天猫2019年销售额

时间:2023-03-25 19:34:11 Python

刚过双十一,天猫的销售额就创新高,占据了各大新闻媒体的头条。不过知乎上的一个问题提出了一个很有意思的关于这次双十一销售的问题:《如何看待双十一销售额完美分布在三次回归曲线上且拟合高达 99.94%?是巧合还是造假?》本文主要介绍如何用Python实现三次回归曲线的预测功能。1、数据来源采用cnbeta新闻报道中的数据:[《[直击]2019年天猫双11落幕:交易额2684亿元》](https://www.cnbeta.com/articl...保留三位有效数字,其中2009年为5200万,以及2010年为9.36亿,2011年为52亿。2.代码构建我们将使用scikitlearn的多项式回归来实现预测,训练集为2009-2014年的数据,后续测试增加训练集直到2018年。2.1数据预处理构建三次多项式特征需要以列的形式存在,所以代码会将numpy数组reshape为列#数据集datasets_X=[2009,2010,2011,2012,2013,2014]datasets_Y=[0.52,9.36,52.0,191,350,571]test_X=[2015,2016,2017,2018,2019]real_Y=[912,1207,1682,2132,2684]#数据预处理dataset_length=len(datasets_X)test_length=len(test_X)#将数据转化成numpy数组,变成列形式datasets_X=np.array(datasets_X).reshape([dataset_length,1])test_X=np.array(test_X).reshape([test_length,1])datasets_Y=np.array(datasets_Y)real_Y=np.array(real_Y)2.2数据建模训练这里需要注意的是,三次多项式特征必须先构造,然后才能放入线性回归模型。#数据建模#构造三次多项式特征poly_reg=PolynomialFeatures(degree=3)X_poly=poly_reg.fit_transform(datasets_X)#使用线性回归模型学习X_poly和datasets_Y的映射关系lin_reg_3=LinearRegression()lin_reg_3.fit(X_poly,datasets_Y)####2.3数据预测训练完成后,可以使用lin_reg_3模型进行预测:data=poly_reg.fit_transform(test_X)pred=lin_reg_3.predict(data)print(pred)结果:[830.642510411127.889195441457.4784135818414.4818414.47】在这个训练集的基础上,预测2019年的销售额是2193亿,和真实的2684亿还有点差距。但这不是很直观,让我们将数据可视化并逐渐增加训练集。3、使用matplotlib进行数据可视化可以很简单的实现这一步,设置X轴范围—画数据点—画线,最后加上横纵轴描述。#数据可视化#X轴X=np.arange(2009,2020).reshape([-1,1])#蓝色显示训练数据点plt.scatter(datasets_X,datasets_Y,color='blue')#红色显示Real数据点plt.scatter(test_X,real_Y,color='red')#黄色显示预测数据点plt.scatter(test_X,pred,color='yellow')plt.plot(X,lin_reg_3.predict(poly_reg.fit_transform(x)),color='black')plt.xlabel('year')plt.ylabel('销售额(亿)')plt.show()结果如下,蓝色点为训练值,和红色点为真实值,黄色点为预测值:训练集加入2015年的真实数据,结果如下:有趣的是,真实值低于预测值,说明2015年的营业额非常好。将2016年的真实数据加入到训练集中看看。现在,2017年和2018年的预测值非常接近。2019年预计销售额2507.399亿元,与实际2684亿元相差100多亿元。让我们继续,将2017年的真实数据添加到训练集中,以预测2018年和2019年的销售额。非常好,但2019年的预测销售额为2750亿,略高于2684亿的实际值。最后我们将2018年的真实值加入到训练集中,看看模型2019年的预测值是多少,惊呆了,小红点和小黄点完美重合。按照这个模型计算,2020年双十一销售额为3293亿元。关注文章底部Python实战宝典公众号二维码,回复天猫销量预报或阅读原文下载查看本模型完整源码:importmatplotlib.pyplotaspltimportnumpyasnpfromsklearn.linear_modelimportLinearRegressionfromsklearn.preprocessingimportPolynomialFeaturesfromsklearn.metricsimportr2_score#指定默认字体,否则图片无法显示中文frompylabimplompl.rcParams['axes.unicode_minus']=False#解决符号显示问题mpl.rcParams['font.sans-serif']=['方松']#数据集datasets_X=[2009,2010,2011,2012,2013,2014,2015,2016,2017,2018]datasets_Y=[0.52,9.36,52.0,191,350,571,912,216207,]test_X=[2019]real_Y=[2684]#数据预处理dataset_length=len(datasets_X)test_length=len(test_X)#将数据转换成numpy数组datasets_X=np.array(datasets_X).reshape([dataset_length,1])test_X=np.array(test_X).reshape([test_length,1])datasets_Y=np.array(datasets_Y)real_Y=np.array(real_Y)#数据建模#构造三次多项式特征poly_reg=PolynomialFeatures(degree=3)X_poly=poly_reg.fit_transform(datasets_X)#使用线性回归模型学习X_poly和datasets_Y的映射关系lin_reg_3=LinearReregression()lin_reg_3.fit(X_poly,datasets_Y)data=poly_reg.fit_transform(test_X)pred=lin_reg_3.predict(data)print(pred)#数据可视化#X轴X=np.arange(2009,2020).reshape([-1,1])#蓝色显示训练数据点plt.scatter(datasets_X,datasets_Y,color='blue')#红色显示真实数据点plt.scatter(test_X,real_Y,color='red')#黄色显示预测数据点plt.scatter(test_X,pred,color='yellow')plt.plot(X,lin_reg_3.predict(poly_reg.fit_transform(X)),color='black')plt.xlabel('year')plt.ylabel('销售额(亿)')plt.show()如果喜欢今天的Python教程,请继续关注Python实战宝典。如果对您有帮助,请在下方点赞/观看有问题可以在下方留言区留言,我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典原文来自Python实战宝典:2019年天猫销量的Python多项式预测