MAU(月活跃用户)全景分析指南:Python滚动计算、结构拆解与生态健康诊断

MAU(月活跃用户)全景分析指南:Python滚动计算、结构拆解与生态健康诊断

MAU(月活跃用户数)定义

MAU(Monthly Active Users) 指在近30天(自然月或滚动30天)内至少使用一次产品的独立用户总数,是衡量产品用户基数和长期粘性的核心指标。

关键特性:

与DAU(日活)互补:DAU反映短期爆发力,MAU体现长期生态健康度

业务价值:评估用户池规模、计算粘性比率(DAU/MAU)、指导资源投入

Python分析MAU全流程(附代码)

1. 数据准备

数据集 user_activity.csv 结构:

csv

2. 滚动30天MAU计算

python

import pandas as pd

import numpy as np

from datetime import timedelta

# 读取数据并转换日期

df = pd.read_csv('user_activity.csv', parse_dates=['event_date'])

min_date, max_date = df['event_date'].min(), df['event_date'].max()

# 生成日期范围索引

date_range = pd.date_range(min_date, max_date, freq='D')

# 计算每日MAU(滚动30天独立用户)

mau_data = []

for day in date_range:

start_date = day - timedelta(days=29) # 包含当天共30天

period_users = df[(df['event_date'] >= start_date) &

(df['event_date'] <= day)]

mau = period_users['user_id'].nunique()

mau_data.append({'date': day, 'MAU': mau})

mau_df = pd.DataFrame(mau_data)

print(mau_df.head())

输出示例:

dateMAU2023-07-0115,8922023-07-0215,915

3. 高级分析场景

场景1:MAU构成拆解(新老用户)

python

# 标记用户首活月份

df['first_active_month'] = df.groupby('user_id')['event_date'].transform('min').dt.to_period('M')

# 按日计算MAU及新老用户占比

def calculate_mau_components(day):

start_date = day - timedelta(days=29)

period_data = df[df['event_date'].between(start_date, day)]

# 新用户:首活在当月

new_users = period_data[period_data['first_active_month'] == day.to_period('M')]['user_id'].nunique()

# 老用户:首活在当月之前

returning_users = period_data[period_data['first_active_month'] < day.to_period('M')]['user_id'].nunique()

return new_users, returning_users

# 应用计算

mau_df[['new_users', 'returning_users']] = mau_df['date'].apply(

lambda x: pd.Series(calculate_mau_components(x))

)

mau_df['new_user_ratio'] = mau_df['new_users'] / mau_df['MAU'] * 100

输出:

dateMAUnew_usersreturning_usersnew_user_ratio2023-07-3118,2002,10016,10011.5%

场景2:流失健康度分析

python

# 计算月流失率 = 1 - (本月MAU - 本月新增) / 上月MAU

mau_df['prev_MAU'] = mau_df['MAU'].shift(30) # 上月同日MAU

mau_df['churn_rate'] = (1 - (mau_df['MAU'] - mau_df['new_users']) / mau_df['prev_MAU']) * 100

# 识别异常流失(>20%)

high_churn = mau_df[mau_df['churn_rate'] > 20]

场景3:DAU/MAU粘性比率

python

# 合并DAU数据(假设已有dau_df)

mau_df = mau_df.merge(dau_df, on='date', suffixes=('', '_daily'))

mau_df['stickiness'] = mau_df['DAU'] / mau_df['MAU'] * 100 # 活跃用户日均参与度

# 可视化趋势

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))

plt.plot(mau_df['date'], mau_df['stickiness'], label='DAU/MAU Ratio')

plt.title('用户粘性趋势分析')

plt.ylabel('粘性比率 (%)')

plt.axhline(y=20, color='r', linestyle='--', label='健康基准线') # 行业基准

plt.legend()

https://i.imgur.com/5zX9TbR.png 解读:低于20%表明用户低频使用,需提升核心功能吸引力

关键业务应用

生态健康诊断

理想结构:老用户占比 > 70%(成熟产品)

报警逻辑:

python

if (mau_df['new_user_ratio'].iloc[-1] > 50) & (mau_df['stickiness'].iloc[-1] < 15):

alert("警告:过度依赖新用户且粘性不足!")

资源投入决策

老用户流失率上升 → 加强召回活动/福利投放

新用户占比过低 → 增加渠道买量预算

python

# 计算用户获取效率

cost_data = pd.read_csv('marketing_cost.csv') # 含日期、渠道成本

merged_data = mau_df.merge(cost_data, on='date')

merged_data['cost_per_mau'] = merged_data['total_cost'] / merged_data['new_users']

功能迭代评估

新版本上线后,对比MAU增长斜率

python

from scipy import stats

pre_update = mau_df[mau_df['date'] < '2023-07-01']['MAU']

post_update = mau_df[mau_df['date'] >= '2023-07-01']['MAU']

slope_pre, _ = stats.linregress(np.arange(len(pre_update)), pre_update.values)[:2]

slope_post, _ = stats.linregress(np.arange(len(post_update)), post_update.values)[:2]

print(f"版本更新前MAU月增长率: {slope_pre:.0f}人/天, 更新后: {slope_post:.0f}人/天")

相关推荐

《放置奇兵》光环作用介绍

《放置奇兵》光环作用介绍

📅 10-06 👁️ 9518
一文解决如何使用 C 语言判断质数(素数)[ 附解析与源码 ]
什么是 4PL (第四方物流)?定义、优势和示例