作者 | CDA 数据分析师
出品 | CDA 数据科学研究院
大家好,2019 年的双 11 过去了,成交额又破记录了!你贡献了多少?
在上期节目的最后,我们留下了一个问题,就是这次双十一成交额会冲到多少。(上期内容请看《今年双 11,你盖楼了吗?| 大数据解读,双 11 那些有趣的事儿 …》)
很多朋友留言,有的说会破 3000 亿,也有人说会不如去年。
视频奉上,一睹为快:
精准预测 2019 年天猫双 11 成交额!
我也跑去问了我那个睿智的同事,他预测能到多少。他推了推眼镜对我说,今年成交额会在 2680 亿元左右。
当时我不知道这个有多厉害,直到今天 12 号零点钟声敲响,天猫官方公布的最终数据,双 11 成交额为 2684 亿元,我才震惊地发现,我这个睿智的同事,他竟然神预测了,误差仅仅千分之一!
我知道你们有人肯定会觉得我们这个是不是搞什么马后炮的事件营销,来博眼球!
不要忘了我们的口号:Show me data,用数据说话!
我睿智的同事给我展示了一堆代码,画了一堆图 ….
下面,我用最通俗的语言来给大家讲一遍。
首先,我们要观察数据,对着 Excel 表光光看肯定是不行的,很难看出规律。让我们用散点图的形式来列出 2009-2018 这十年的天猫双 11 成交额数据。
这个散点图的形态,不管你是不是专业的数据分析师,就算是小孩子,都能拿个笔、画个线,把点连起来。
没错,我们接下来要做的就是这事儿,不过数据分析领域的专业名词叫做“拟合”,我们用 sklearn 这个库来做一个多项式回归拟合。
不要问为什么,问就是 Python !
这个函数就是帮我们来画个能连起来最多点的曲线。
这个过程我们也称为训练,一般情况我们需要反复地训练,结果这个数据太完美,轻松一画,点一个不落地被曲线串起来了。
关键点来了,让人来画线的话,跟着点连线没问题,点没了线往哪儿画就各有各的方向了。而数据分析的代码已经把这个曲线的参数记录了下来,要预测未来的数据就非常简单了。
这就是我睿智的同事预测的 2680 亿元的方法。
具体代码如下:
import sklearn.pipeline as pl
import sklearn.linear_model as lm
import sklearn.preprocessing as sp
import matplotlib.pyplot as mp
import numpy as np
import sklearn.metrics as sm
# 采集数据
x, y = np.loadtxt('ex0.txt', delimiter=',', usecols=(0, 1), unpack=True)
# 把输入变为二维数组,一行一样本,一列一特征
x = x.reshape(-1, 1)
# 创建模型
model = pl.make_pipeline(sp.PolynomialFeatures(5), # 多项式特征拓展器
lm.LinearRegression() # 线性回归器)
# 训练模型
model.fit(x, y)
# 求预测值 y
pred_y = model.predict(x)
# 绘制多项式回归线
px = np.linspace(x.min(), x.max(), 1000)
px = px.reshape(-1, 1)
pred_py = model.predict(px)
# 绘制图像
mp.figure("Poly Regression", facecolor='lightgray')
mp.title('Poly Regression', fontsize=16)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.xlabel('x')
mp.ylabel('y')
mp.scatter(x, y, s=60, marker='o', c='dodgerblue', label='Points')
mp.plot(px, pred_py, c='orangered', label='PolyFit Line')
mp.tight_layout()
mp.legend()
mp.show()
其实通过这个方法,我们靠着 2016 年之前的数据,就能够预测出 2017 年的成交额是 1660 亿元,与实际的 1682 亿元,误差是 1.28%,能够预测出 2018 年的成交额是 2139 亿元,与实际的 2135 亿元,误差是 0.21%。
而今年预测的 2680 亿元,与实际的 2684 亿元,误差仅仅 0.14%,千分之一。
按照同样的方法,如果让我们提前一年预测一下 2020 年的双 11 成交额,将成功打破 3000 亿,达到 3282 亿元,至于准不准,我们只能等到明年的双十一了。