游戏开发论坛

 找回密码
 立即注册
搜索
查看: 25869|回复: 6

游戏超强攻略(一):通过留存预测未来DAU与LTV

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-11-30 15:55:15 | 显示全部楼层 |阅读模式
本帖最后由 小篱 于 2015-12-1 14:42 编辑

t01eb74a44c2eb43193.jpg

  文 / 66TEAM · 在下

  这几天, 一直有人拉着讨论这么一个问题:

  已知次日留存42%,三日留存27%,七日留存15%,求一个月以后该游戏的日活跃或者LTV情况。我们把求日活跃与LTV当成两个问题来分析

  先说第一个问题: 求一个月后的日活跃, 我们需要知道这天的活跃用户都是由哪些人组成。 假设这个月的时间段为10.1~10.31, 我们需要求10.31的用户活跃。

  那么

  10.31的活跃用户=10.31当天新增的用户+10.30的次日留存用户+10.29的三日留存用户+10.28的四日留存用户……。+ 10.1的30日留存的用户。

  等式右边的数据, 我们可以将之分解为:

  10.30的次日留存用户=10.30的新增用户*次日留存

  10.的三日留存用户=10.29的新增用户*三日留存

  ……………。

  10.的30日留存用户=10.1的新增用户*30日留存

  而对于我们来说 10.1~10.31的新增用户是可知的, 比如去问问运营平均每天导入多少用户。 于是我们这个问题就简化成了:

  已知。2日,3日,7日留存, 求该游戏的2~30日留存。 为了保证通俗易懂性, 这部分不会涉及过多的专业名词或者概念

  一.基本概念

  为了求2~30日的留存, 首先需要说明一些基本的数学概念

  1.我们将已知的留存2,3,7日留存42%,27%,15%以几何图形的形式表现出来

新建 Microsoft Office Word 文档746.png

  将这个图形抽象化平面几何中, 我们可以看到, 实际上留存在二维空间中表现的是一个有斜向下趋势的曲线。

  2.一些基本的二维曲线方程

  我们再来复习一下基本的几何知识

  A.幂函数

  幂函数的形式为y=xa(a为实数)的函数, 常见形如

  y=x2

  y=x-1即y=1/x

  y=x1/2

  y=x

  他们在第一象限中的图形如下所示

新建 Microsoft Office Word 文档1075.png

  B.对数函数

  对数函数的形式y=loga(x) 其中(a>0,且a≠1), 意思为在x=ay的形式当中, 已知x和a求y。

  常见以e为底的对数函数, 记做lg(x)。 在第一象限中的基本图像如下图所示。

新建 Microsoft Office Word 文档1350.png

  诶, 我们一看y=logax 当0的时候, 这个曲线好像我们的留存曲线啊, 事实上, 我们正是要将留存曲线拟合成这种对数函数的形式来进行剩余天数的推导。

  C.指数函数, 正弦/余弦函数,伽马函数等

  这些如果大家有兴趣了解, 请自行百度, 或者查阅相关书籍, 或者咨询专业人士。

  经过第二步的梳理, 我们知道了我们要怎么做了。 假设我们游戏留存的函数为

  y=a*lg(x)+b  ß大家可以思考下,回顾一下在几何中a和b的意义。以及为什么要设置成y=a*f(x)+b的形式。

  我们已知

  x=2的时候y=0.42

  x=3的时候y=0.27

  x=7的时候y=0.15

  我们需要做的就是推导出这个公式当中a和b的值, 并将其代入公式(函数)当中, 求解出x=4,5,6,8,9,…。30 时候y的值。 这个过程我们称之为曲线拟合。 在挖掘中称之为回归(regression)。

  二.实际求解

  在实际求解当中, 我们有很多非常易用的工具来做这种推导, 以下就列举几种较为常见的工具来实现推导。

  1.Excel

  A.将天数当成x轴,留存当成y轴, 并画出对应曲线。

新建 Microsoft Office Word 文档2017.png

  B.右键单击这条曲线, 选择添加趋势线

新建 Microsoft Office Word 文档2207.png

  C.点选对数, 勾选显示公式和显示R平方值

新建 Microsoft Office Word 文档2399.png

  D.最终我们可以看到结果

新建 Microsoft Office Word 文档2582.png

  那么利用excel得出的对数函数的公式为y=-0.147*ln(x)+0.4017

  利用这个公式, 我们在excel一拉, 就可以得出我们要的留存预测了。

新建 Microsoft Office Word 文档2832.png

  预测留存使用的公式为y=-0.147*ln(c2-1)+0.4017

  这里需要注意的是, excel的趋势线是按照行号进行的, 所以, 在图中我们需要补全4,5,6天, 即使它是没有数据的。计算的时候需要将天数-1当成x值代入(这里实际上是涉及另外一个概念, 但是没关系, 不影响认知)

  lR平方值, 是用来验算曲线的拟合程度, 取值范围在0~1之间,一般来说当R2<=0.95的时候, 我们认为拟合精准度不高,但具体是否可以使用, 看业务需求, 假如只是需要一个大概估计, 0.8以上就可以使用,拟合程度越高。 R方这个概念我们将在之后讨论, 目前只需要了解它的作用及意义。 本例中结果的R方值为0.9628>0.95。 可以认为这个曲线已经近似拟合。

  2.SPSS

  A.新建工作表, 填入数据

新建 Microsoft Office Word 文档3358.png

  B.选择分析->回归->曲线估计

新建 Microsoft Office Word 文档3547.png

  C.将留存设置成因变量, 将天数设置成变量,选择对数模型, 点选保存按钮,勾选预测值,以及设置95%置信区间(即R方值)

新建 Microsoft Office Word 文档3780.png

  一路运行下去, 我们可以得到结果

新建 Microsoft Office Word 文档3969.png

新建 Microsoft Office Word 文档4141.png

  我们可以看到,在参数评估当中,当前模型的R方值结果只有0.938, 并没有达到我们的0.95的精度要求,

  而本次推出的算式为 y=-0.204loge((x)+0.534

  如果需要得到更加精准的算式, 请获取更多的留存信息, 这样子得出的算式就会越靠近我们的真实数据

  本例中只是简单的进行示例, 没有做任何额外操作, 实际操作中需要考虑其他因素

  Excel部分和spss部分, 感谢蛋总的无私奉献, 请大家给他点赞, 送妹子。 让他请你们吃饭

  3.Python

  好了, 终于到了老本行了。

  回归实际上是机器学习的一部分, 用于回归处理的方法一般包括岭回归,最小二乘法等方法。本例中将采用最小二乘法来实现。

  本例讲解:

  http://blog.chinaunix.net/xmlrpc.php?id=3201176&r=blog/article&uid=9162199
  1. import numpy as np

  2. from scipy.optimize import leastsq

  3. import pylab as pl

  4. import math
复制代码
#定义函数
  1. import numpy as np

  2. from scipy.optimize import leastsq

  3. import pylab as pl

  4. import math
复制代码
#定义残差函数
  1. def residuals(p,y,x):

  2.    ret=y-func(x,p)

  3.    return ret


  4. x3=np.linspace(0,30,1000) #用于画图精度的调节

  5. x0=[1,2,6] #x变量, 在这里2,3,7全部减1

  6. x2=np.array(x0) #向量化x变量

  7. y0=[0.42,0.27,0.15] #y

  8. y2=np.array(y0)#向量化

  9. p0=[0.5,0.5]#取值起始点


  10. qs=leastsq(residuals,p0,args=(y2,x2)) #最小二乘法

  11. print qs[0] #为最佳的拟合函数参数

  12. pl.plot(x0,y0,label=’Real’,color=’red’) #画出实际图像

  13. pl.plot(x3,func(x3,qs[0]),label=’sim’,color=’blue’) #预测图像
复制代码
新建 Microsoft Office Word 文档5674.png

  #统计R方
  1. def residuals(p,y,x):

  2.    ret=y-func(x,p)

  3.    return ret


  4. x3=np.linspace(0,30,1000) #用于画图精度的调节

  5. x0=[1,2,6] #x变量, 在这里2,3,7全部减1

  6. x2=np.array(x0) #向量化x变量

  7. y0=[0.42,0.27,0.15] #y

  8. y2=np.array(y0)#向量化

  9. p0=[0.5,0.5]#取值起始点


  10. qs=leastsq(residuals,p0,args=(y2,x2)) #最小二乘法

  11. print qs[0] #为最佳的拟合函数参数

  12. pl.plot(x0,y0,label=’Real’,color=’red’) #画出实际图像

  13. pl.plot(x3,func(x3,qs[0]),label=’sim’,color=’blue’) #预测图像
复制代码
 #打印预测结果
  1. for aa in range(1,31):

  2.   print aa,func(aa,qs[0])


  3. pl.legend()

  4. pl.show()
复制代码
预测结果如下:

新建 Microsoft Office Word 文档5903.png

  另外, 蛋总倾情推荐eviews进行线性回归与预测或者最小二乘法的执行, 大家如果有兴趣也可以去下载试用一番。

  四.思考

  1.在上述的的推导过程中, 我们使用的是纯数学知识, 我们忽略了什么前置因素对于新玩家留存的影响?

  2.我们预测的结果在与当前实际结果相比较的时候, 精度是较高的, 然而对于后续的预测, 往往可能出现较大的偏差, 这个时候, 在预测模型当中, 我们实际上忽略了什么东西的影响?

  3.通过已知留存和导入, 如何快速的利用工具得出玩家活跃数?

  4.在实际业务当中, 这个预测到底有什么用途呢?

  5.实际拟合精度跟数据的多寡的关系多大呢?

  6.推导出的函数公式中 a和b的值对于实际业务的指导意义又是什么?

0

主题

62

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2015-11-30 16:56:14 | 显示全部楼层
试图用一个规律性的数学方法去总结并预测一个非规律性的现实,是不是傻?

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2015-11-30 17:44:40 | 显示全部楼层
LZ装的一手好B。哈哈,笑而不语。 又是个靠嘴的。

0

主题

4

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
发表于 2015-11-30 18:26:46 | 显示全部楼层
码字不易,但是这套算法,略有牵强,就拿你的留存数据来看,完全可以拿30号的登陆留存来+31号的注册人人数即可,用不着这么复杂

5

主题

120

帖子

745

积分

高级会员

Rank: 4

积分
745
发表于 2015-11-30 20:34:35 | 显示全部楼层
我其实用过楼主这套……
趋势线+线性回归的方法来做

运营需要在产品初期做财务模型的时候,其实可以这么用~

顶楼主一个

0

主题

26

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2015-12-1 10:54:15 | 显示全部楼层
反正我get到了~!谢谢楼主

0

主题

1

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2015-12-1 18:45:57 | 显示全部楼层
楼主在实际应用中 误差在多少呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 21:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表