加载中

Robin
Python拟合 LTV

用Python拟合计算LT

2020/9/7 · 2 min read

做打 ROI 的时候,经常要预估 LTV,看投入产出比是否为正。之前整理留存数据再用幂函数拟合特别麻烦,想着能不能用 Python 自动化拟合计算 LT。

后来通过万能的谷歌知道了 scipy 包和 sympy 包,写了一套直接写入数据拟合计算 LT 的脚本,废话不多说,直接展示代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from sympy import *
from scipy import integrate
 
# 提取哪一段时间的 LT
day_start = 20191220
day_finish = 20191223
 
# 打开存活表
csv_path = '/Users/xx/Desktop/python查数据/韩国存活留存.csv'
d = pd.read_csv(csv_path)
 
k = d.loc[(d["first_day"] >= day_start) & (d["first_day"] <= day_finish)]
x_list = []
 
# 计算这段时间的留存率均值
# 因为导入的 csv 第二列是新增用户数,如果你第二列是第一天留存,你 range 里面就从 1 开始
for i in range(2, 21):
    a = (pd.to_numeric(k.iloc[:, i], errors='coerce')).mean()
    if a > 0:
        x_list.append(a)
 
# 生成留存天数 x
length = len(x_list) + 1
y_list = []
for i in range(1, length):
    y_list.append(i)
 
x_list = [0.34, 0.25, 0.23, 0.21, 0.19, 0.17, 0.15, 0.13]
y_list = [1, 2, 3, 4, 5, 6, 7, 8]
 
dic = {'x': x_list, 'y': y_list}
frame = pd.DataFrame(dic)
x = frame['x']
y = frame['y']
 
# 写幂函数方法
def func(x, a, b):
    return a * pow(x, b)
 
# 将留存率和天数作为 XY 坐标写入获得 a,b 系数
popt, pcov = curve_fit(func, y, x)
a = popt[0]
b = popt[1]
 
# 将系数带入公式,模拟 180 天
def f(x):
    return a * x ** b
 
lv, err = integrate.quad(f, 1, 180)
print(lv)

相关文章