使用Python自动化预测游戏LTV

LTV定义

LTV(life time value)也就是用户生命周期价值,是产品从用户获取到流失所得到的全部收益的总和。LTV用于衡量用户对产品所产生的价值,是所有用户运营手段为了改善的终极指标,同时LTV也应该是所有运营手段的最终衡量指标。

游戏公司在广告投放时,通常需要分析买量投入产出比,而评判能不能赚钱的指标就是ROI=LTV/CPA,其中CPA是新增用户注册成本。

LTV(N日)=(某日新增玩家第1天充值+某日新增玩家第2天充值+....+某日新增玩家第N天充值)/该日新增玩家数

传统LTV预测算法

一、LTV预估基本思路

利用真实的留存率来估算玩家未来的留存率,计算生命周期LT,计算并预估新增用户ARPU,从而计算出玩家的生命周期价值:

LTV(n)=LT(n)新增用户ARPU(n)*

二、基本定义

1、LT(生命周期)

LT(n)=Σ retention i = 1(新增当日留存)+(次日留存)+(+2日留存)+…+(+(n-1)日留存)

2、新增用户ARPU

新增用户ARPU(n)=新增用户N日累计收入/N日新增用户累计活跃天(人)数

3、LTV(n)=新增用户N日累计收入/新增用户数=LT(n)新增用户ARPU(n)*

image.png

三、预估方法

1、留存率预估

根据现有数据观察,一批新增玩家的留存率随时间的增长必然无限趋近于0,用几何图形表示就是一条递减的幂函数曲线。

该曲线可以用以下函数表示:

y=ax^b*

其中x为天数,y为留存率。通过线性回归可以得出a和b的估计值,从而预测留存率。

b值越大,说明留存率越好

1)实现方法

线性回归有许多拟合数据的方法,这里采用scipy.optimize 中的curve_fit()函数,它利用的是最小二乘算法。最小二乘算法是一种数学优化技术,在机器学习领域最有名和有效的算法之一。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

【实现代码】

# 导入数据统计的包
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np

#读取留存率数据
ret_df=pd.read_csv('ret.csv')

# 定义幂函数公式 y=ax^b
def fund(x, a, b):
    return a*(x**b)

# 截取前14天数据作为训练集
popt, pcov = curve_fit(fund, x[:14], y[:14])

#popt数组中,三个值分别是待求参数a,b
y_predict= [fund(i, popt[0],popt[1]) for i in x]

plt.plot(x,y,'b-')
plt.plot(x,y_predict,'r--')

image.png

2)模型效果

采用全量数据作为测试集,进行均方误差验证

# 导入sklearn包
from sklearn.metrics import mean_squared_error
from sklearn.metrics import median_absolute_error

# 计算MSE误差率
print("MSE误差率为:",np.mean((y-y_predict)**2))

# 计算模型预测数与实际数据误差
bias=y_predict-y
plt.plot(x,bias,'b-')

# 查询90天真实与预测留存率
print("90天真实留存率为:",y[90])
print("90天预测留存率为:",y_predict[90])

模型预测偏差趋势图


image.png

MSE误差率为:1.5912876055059092e-05
90天真实留存率为:0.0255
90天预测留存率为:0.025509515682735667

3)模型修正

现实中,模型和实际数据之间经常会存在误差,所以需要要对预测的数据进行修正。接下来,我们就要对留存预测模型进行修正。

# 使用线性回归对偏差率进行预测,进而对模型预测进行修正
x=x.reshape(-1,1)
y=y.reshape(-1,1)
y_predict=np.array(y_predict).reshape(-1,1)
ratio=(y_predict-y)/y
from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(x[:30],ratio[:30])
ratio2=model.predict(x)
y_predict_re=y_predict*(1+ratio2)

# 修正后模型预测与实际值的误差
print("修正后MSE误差率为:",np.mean((y-y_predict_re)**2))
plt.plot(x,y,'b-')
plt.plot(x,y_predict_re,'r--')

修正后MSE误差率为:1.3018758801605825e-05
修正后模型预测与实际值的误差:


image.png

修正后模型MSE误差率降低率,上图偏差趋势图可见,虽整体误差率不大,但前期预测误差较大,后期误差率曲趋向平缓,采用采用线性回归对偏差率进行预测拟合再修正模型,这可作为模型调优的一种方法。

4)总结

用户平均生命周期y=

image.png
f(x)d(x),其中f(x)为留存率与时间的拟合函数

拟合出留存率与时间的函数,然后算出原函数,最后算一个日期趋向于+无穷大时的极限值,该极限值就是用户平均生命周期。

观察发现前期留存率的预测是相对准确的,虽然存在下降趋势缓慢不一致现象,但误差值符合商业上的误差容忍度。

2、ARPU预测

1)ARPU介绍

ARPU(Average Revenue Per User) :平均每用户收入,可通过 总收入/DAU 计算得出。它可以衡百量产品的盈利能力和发展活力。

ARPU值常规情况下是特指某一天的付费除以DAU得出的产品都得能力的体现值,但因为产品每天新增用户不同(新老用户比例),产品状态不同(版本维护情况),用户来源不同等因素导致ARPU值每天都不一样,但是总体处于一个区间内,不同产品新增用户ARPU增长趋势区别较大,因此针对不同产品,预估方法略有区别。

【游戏1示例】

游戏1ARPU增长期较长,前期增长较大,观察规律教服从对数增长趋势。

可以采用对数函数y=a*ln(x)+b拟合新增用户ARPU(其中x为注册天数(注册当天x=1),y为新增用户ARPU)。

image.png

【游戏2示例】

就游戏2而言,新增用户arpu在7~14日的新增用户arpu会增长约4%;14日之后的新增用户arpu基本保持平稳。

当已有真实数据>n(n>=14)天时,采用LTV(n)=LT(n)*已有最新的新增用户arpu。

image.png

2)ARPU预测方法

使用多项式y=a*log(x)+b进行预测,发现实际数与模型预测值误差较大,且10日之后的新增用户arpu基本保持平稳。因此可采用已有真实AVG(arpu(n))。

#截取前60天真实arpu数据,展示趋势
x=[i for i in range(1,60)]
x=np.array(x)
y=pd.to_numeric(arpu_t.iloc[0][1:60]).values
plt.plot(x,y,'b-')

60天真实arpu趋势


image.png
#尝试采用多项式函数预测效果
# 定义多项式公式 y=a*log(x)+b
def fund(x, a, b):
    return a*np.log(x)+b

# 截取前30天数据作为训练集
popt, pcov = curve_fit(fund, x[:30], y[:30])
#popt数组中,三个值分别是待求参数a,b
y_uppre= [fund(i, popt[0],popt[1]) for i in x]
y_uppre
plt.plot(x,y,'b-')
plt.plot(x,y_uppre,'r--')

多项式函数预测模型与真实数据对比


image.png

机器学习预测算法

传统的LTV预估模型存在很大局限性,如:用户再游戏过程中,每天的ARPU都不是一个恒定值,多数游戏是前期高,后期下降并趋势于稳定,所以ARPU采用单一的国定值预测是非常不可靠的。想提升LTV预测的准确率,可尝试更多的机器学习算法进行预测,后期会继续更新。

你可能感兴趣的:(使用Python自动化预测游戏LTV)