前面还写过一篇多元回归的内容,是通过在PowerQuery里面调用Python实现回归参数计算的,然后在PowerBI里面使用计算的参数来进行预测,感兴趣的可以跳转《使用Python回归分析预测销售额》,后面可能还会演示一下使用R语言的实现方式,毕竟还是有很多人在使用R,先展示一下本篇的效果。
这一篇的一元线性回归,就完全是通过PowerBI里面度量值和新建列来完成了,所以灵活性要更强,借鉴这个思路应该还能够直接在PowerBI里面实现其他用数学公式直接推导结果的算法。至于什么是一元线性回归和用途,这里就不多介绍了,简单说就是一个变量控制一个结果,用多个数据把二者的线性关系计算出来,公式是y=m*x+b,其中y是结果值,x是影响因素。比如我们有很多个月的费用投入和产出数据,每一次的投入就是x,对应的产出就是y,x和y是我们已知的,通过带入多个已有的值,我们就可以计算出最佳的m和b值,对应斜率和截距,大概如下面这张图↓
首先准备今天的数据,模拟了从10年至今每个月三个产品的投入费用和每月对应产出的GMV,我们的目的是通过历史数据来预测接下来的投入和产出,这里使用三个品牌目的是等一下演示在PowerBI里面可以灵活展示不同的数据,数据字段如下↓
然后是今天使用的核心,计算斜率和截距两个参数的公式,有了这两个值,带入任何投入就可以得到对应的产出值了。推导过程是个黑匣子,有兴趣的去翻翻你们统计学的课本就能找到了,仔细看应该问题不大,但我们是注重应用,就直接把推导的结果拿来用了。
(斜率公式m如上↑)
(截距公式b如上↑)
公式有了,数据也有了,接下来就是PowerBI表演的时候的。先把数据导入,然后先通过新建列的方式把x的平方和x*y计算出来,DAX和结果如下↓
x_sqrt = [费用投入万元]*[费用投入万元]
xy = [费用投入万元]*[GMV万元]
然后通过度量值把公式中需要用到的值继续建立起来,DAX语句如下↓
N_num = COUNTA([产品])
sum_x = SUM([费用投入万元])
sum_y = SUM([GMV万元])
sum_xy = SUM([xy])
sum_x_sqrt = SUM([x_sqrt])
基本的元素都有了,把所有的元素放入上面计算斜率和截距的公式就可以了,DAX语句和结果如下↓
斜率参数 =
DIVIDE(
[N_num]*[sum_xy] - [sum_x]*[sum_y],
[N_num]*[sum_x_sqrt] - [sum_x]^2
)
截距参数 =
DIVIDE(
[sum_y]*[sum_x_sqrt] - [sum_x]*[sum_xy],
[N_num]*[sum_x_sqrt] - [sum_x]^2
)
到此,我们基本准备工作完成了,接下来就是根据一元回归的公式把预测值得公式写出来,思路就是通过新建一个可选的参数度量值,把这个参数度量值带入公式里面就可以了,需要如下操作↓
预测值 =
[斜率参数]*[BCG_v Value] + [截距参数]
大功告成。我们可以看到可以通过所有产品的数据来进行预测,也可以看单个产品的预测结果,这就更具体和灵活的。当然还可以根据月份来选择,特别是有些产品是分淡旺季的,用全年的数据来预测效果就不是很好了,这样我们只需要再加个月份的筛选器就轻松解决了。
最后我们新建一个在图上展示参数值和结果的提示度量值,DAX和最终结果如下↓
公式提醒 = "GMV(万) = "&FORMAT([截距参数],"#0.00") & " + 费用投入*" & FORMAT([斜率参数],"#0.00")
好了,到此,后续应该还会分享一些其他机器学习算法和PowerBI联动的内容,但应该要结合Python和R才行。
End
◆ PowerBI_RFM客户关系模型
◆ PowerBI饼图、圈图、旭日图
◆ Excel时间序列预测函数
◆ Python操作MySQL数据库
◆ Python企业微信机器人