# 新增用户数计算


2023年 2 月17日证监会制定的《监管规则适用指引——发行类第 5 号》 5-13 中涉及“用户真实性与变动合理性”分析，“包括新增用户的地域分布与数量”，同样 5-14 中“多指标分析性复核“也要求“相关核查包括但不限于用户变动合理性”。

可见对于 IPO 信息系统专项核查中我们需要计算“新增用户”这个数据。

{{< figure src="/ox-hugo/2023-04-22_22-22-06_screenshot.png" >}}


## 如何定义新增用户 {#如何定义新增用户}

对于不同的行业或数据，新增用户的定义是不同的。

一种常见的方式是根据用户是否在某个时间段内首次登录应用来判断是否为新增用户。

另一种方式是根据用户是否完成了某些关键行为来判断是否为有效新增用户。例如，对于电商应用，关键行为可能是下单或付款；

对于教育应用，关键行为可能是观看课程或提交作业。这种方式可以更好地反映用户的价值和留存率。

可以看出，这里我们判断的有两个关键点，也就是将“新增”这两个字拆开：“新”和“增”的约定，即：

1.  时间段
2.  关键行为


## 如何计算新增用户 {#如何计算新增用户}

这里我们还是以电商为例，我们以下单作为首次关键行为，至少时间段我个人理解有两种。


### 历史所有期间 {#历史所有期间}

我们考虑将历史所有期间作为判断这次购买是否为首次购买用户的判断标准。也就是说当我计算 2022 年订单时，只要用户在 2022 年之前任意期间购买过，那么都算老用户。

那么我们可以写SQL:

{{< highlight sql >}}
SELECT
YEAR( first_order_date ) AS 年,
COUNT( DISTINCT `客户`) AS 新客户数量
FROM
(SELECT `客户`, MIN( `订单日期` ) AS first_order_date FROM `销售订单` GROUP BY `客户` ) AS first_orders
GROUP BY
YEAR ( first_order_date )
{{< /highlight >}}

这里我们直接计算订单数据中所有用户**首次购买日期**，然后根据这个首次购买日期聚合，计算出每年的新用户数量。

当然，你也可以按月去聚合，计算出申报期内所有月份的新用户数。


### 某一段区间 {#某一段区间}

当然，我们也可以不考虑历史所有期间，仅考虑一段期间来判断这个用户是否为新用户。

例如，我们以年为区间作为判断依据，如当年购买且上年无购买行为的定义为新用户（注：个人理解）。

{{< highlight sql >}}
select count(distinct `客户`) as 新客户数量
from `销售订单`
where `客户` not in
(
  select distinct `客户`
  from `销售订单`
  where year(`订单日期`)=2021
)
and year(`订单日期`)=2022
{{< /highlight >}}

这就可以计算 2022 年有购买行为且 2021 年无购买行为的新增客户。

当然，你也可以按月设定这个区间。


## 如何计算留存用户数 {#如何计算留存用户数}

与新增用户数相对应的就是留存用户数。

某段时间内的新增用户，经过一段时间后，仍继续使用应用的，为留存用户。

这里我们就可以计算`留存率=留存用户数 /新增用户数 * 100%`

如果是按年统计应该还比较容易，因为你会计算新增用户数，就能计算留存用户数，从而计算出留存率。

但如果要按月统计的话，我不知道该怎么写 SQL ，感觉还是得用 Python 循环计算每个月的容易点。

