数据分析系列:如何估计一个产品用户最大量(最大DAU)——附python计算代码

在做产品的时候,我们希望是数据驱动的。**一个产品的用户天花板(最大DAU)是指导产品的重要指标。**问题来了,如何估计一个产品的DAU?给出解决方案,这是本文解决的主要问题。

一、估计最大DAU

首先,一个产品的活跃用户可以分为两部分,第一部分是当天的新增天用户,第二部分是产品之前的存留用户。这两部分与DAU大致的关系如下:
D A U ( n ) = A ( n ) + A ( n − 1 ) R ( 1 ) + A ( n − 2 ) R ( 2 ) + … … + A ( 1 ) R ( n − 1 ) DAU(n)=A(n)+A(n-1)R(1)+A(n-2)R(2)+… …+A(1)R(n-1) DAU(n)=A(n)+A(n1)R(1)+A(n2)R(2)++A(1)R(n1)

其中, D A U ( n ) 为 DAU(n)为 DAU(n)第n天的日活, A ( n ) A(n) A(n)为第n天的新增, R ( n − 1 ) R(n-1) R(n1)为新增用户在第n-1天后的留存率。

将问题简化一下,假设 A ( n ) A(n) A(n)即每日新增用户是一个常数,这在产品平稳运行时是一个合理的假设。于是上面公式变为下面形式:
D A U ( n ) = A ( 1 + R ( 1 ) + R ( 2 ) + … … + R ( n − 1 ) ) DAU(n)=A(1+R(1)+R(2)+… …+R(n-1)) DAU(n)=A(1+R(1)+R(2)++R(n1))

A A A每日新增用户,我们可以通过统计的方式很容易得到。重点是我们如何估计每日的存留 R ( k ) R(k) R(k)

假设我们有下面的数据:
在这里插入图片描述
第一列时间代表第k天前,即 R ( k ) R(k) R(k)中的 k k k。第二列存留率表示对应时间的用户存留 R ( k ) R(k) R(k)。对应走势如下:
在这里插入图片描述
由于数据不全,我们需要使用现有数据对每一天的存留进行估计,最长用的方式就是使用回归对曲线进行拟合,对曲线形态进行观察,夹着存留与时间存在如下关系: R = C e − a x R = Ce^{-ax} R=Ceax,其中x是时间,R是存留率。于是上面DAU的估计公式变成如下形式(求和变为积分):
D A U ( n ) = A ( 1 + R ( 1 ) + R ( 2 ) + … … + R ( n − 1 ) ) = A ∗ ∫ 0 n C e − a x d ⁡ x DAU(n)=A(1+R(1)+R(2)+… …+R(n-1))=A*\int_0^nCe^{-ax}\operatorname dx DAU(n)=A(1+R(1)+R(2)++R(n1))=A0nCeaxdx

实际上,并不去要真正的求上面积分,因为在极限理论中:
在这里插入图片描述
D A U ( n ) = A ∗ C ∗ 1 / a DAU(n)=A* C * 1/a DAU(n)=AC1/a

接线来就是求C和a了,由于 R = C e − a x R = Ce^{-ax} R=Ceax并不是很好估计,我们对两边同时取对数,可以将其变为线性形式:
l n ( R ) = l n ( c ) − a x ln(R)= ln(c)-ax ln(R)=ln(c)ax

这就是最简单的线性回归了, l n ( c ) ln(c) ln(c)是截距项。对参数 l n ( c ) ln(c) ln(c) a a a进行估计后,我们进行一下转换直接带入下面公式就好啦。
D A U ( n ) = A ∗ C ∗ 1 / a DAU(n)=A* C * 1/a DAU(n)=AC1/a

二、估计最大DAU的python实现

我们假设我们每日的新增用户为 A = 100 w A=100w A=100w,统计到的存留数据如下:
在这里插入图片描述
我们编写程序计算最大的DAU

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 16 10:01:17 2020

@author: nbszg
"""

import numpy as np
import pandas as pd
import scipy.stats as st

import statsmodels.api as sm #最小二乘
from statsmodels.formula.api import ols #加载ols模型
import matplotlib.pyplot as plt

r = [0.72, 0.57, 0.33, 0.18, 0.08]
t = [1, 3, 30, 90, 140]

data = pd.DataFrame()
data['时间'] = t
data['存留率'] = r
A = 1000000

def max_DAU(A, remain, t):
    '''
    计算最大DAU
    Args:
        A: 每日新增用户数
        remain: 各时间存留率
        t: 各时间存留率对应时间
    
    return: 
        最大DAU  
    '''
    remain_data = pd.DataFrame(np.array([remain, t]).T, columns = ['remain', 't'])
    #进行对数变换
    remain_data['ln_remain'] = np.log(remain_data['remain'])
    lm=ols('ln_remain ~ t',data=remain_data).fit()
    #print(lm.summary())
    #得到C
    C = np.exp(lm.params['Intercept'])
    #得到a
    a= -lm.params['t']
    
    DAU = A*C/a
    print("预估产品最大DAU为:{}".format(DAU))
    
    return DAU


max_DAU(A, data['存留率'], data['时间'])

在这里插入图片描述
得到结果为产品的最大DAU为:42526684人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值