



一般来讲,数据指标都有固定的波动周期,而且每个周期内数据的变化应该趋于稳定。如果发现某数据指标出现不符合预期的变化,这就是人们所说的指标异常波动,此时需要分析指标出现异常的原因,指标异常波动也是数据分析工作中最常见的分析场景之一。
先来明确指标波动的几种类型。
一次性波动:只在某个时间节点发生波动。一次性上升/下跌背后一般都是短期/突发事件,例如系统更新导致数据统计错误,突发的渠道投放冻结等。
周期性波动:即周期性发生上升/下跌,例如“双11”、周末、节假日等因素。一般业务开展都有周期性,例如考勤工具类App,工作日和周末就是有明显差异。
持续性波动:从某时间点开始,一直出现上升/下降趋势。持续上升/下跌的原因往往都是深层次的,例如用户需求转移、渠道投放长期暂停、大环境等。
以上3种波动对应着不同的严重程度和处理方式。周期性下跌一般都不需要做特殊处理;一次性下跌往往来比较突然,要关注事件的持续性;持续性下跌,特别是不见好转的,持续的时间越长问题越严重,需要重点关注,后两种情况也是人们通常所说的指标异常波动或者指标异动,是需要进一步分析的。
下面以“某App的日活显著下降”为例,进行指标异动分析。
第一步:确认数据源的准确性
数据真实是根基。在实际工作中,很多指标异常都是因为数据源出了问题,如客户端埋点出错、服务接口报错请求失败等。因此,开始分析前,要先和产品研发部门确认数据源是否有问题。
第二步:评估指标异常程度及影响
明确以下问题。
①日活究竟下跌了多少?波动幅度是否在合理的范围内?持续的时间是多久?
②相比昨天、上周同一天情况如何?
③确认日活下跌对相关业务方KPI影响的程度?
明确了指标下跌是否是真正的异常,并且有了轻重缓急的判断,下一步就可以进行指标的拆解,建立假设逐个验证,进一步逼近真实原因。
第三步:拆解数据指标
例如,日活=新增用户+老用户留存+流失用户回流,将这些指标进一步拆解如下。
①按新增用户来源渠道拆解:如应用市场、百度搜索等。
②按老用户留存渠道拆解:华为、vivo应用商店等。
③按新老用户登录平台拆解:Android、iOS等。
④按新老用户的区域拆解:天津、北京等。
⑤按新老用户使用版本拆解:新老版本。
⑥按新老用户活跃时间拆解:节假日、周期性等。
⑦按回流用户类型拆解:自然回流、回访干预回流等。
第四步:做出假设,分析验证
初步确定异常发生的问题点后,接下来可以分别考虑“内部—外部”事件因素进行假设和验证。内部—外部事件在一定时间内可能会同时存在,万变不离其宗,我们主要关注数据指标的起点、拐点、终点。
数据指标的起点:数据指标刚下跌时,发生了什么事件,往往起点事件是发生问题的直接原因。
数据指标的拐点:在指标持续下跌过程中,是否某个事件的出现让问题变得更严重,或者开始改善。拐点意味着可以通过运营手段改善指标。
数据指标的终点:当某个事件结束后,指标恢复正常。或当开始某个事件后,指标下跌结束。终点事件的两种形态代表着两种改善指标的方法:等问题自己过去或者主动出击解决问题。
内部事件因素分为用户获取渠道(渠道转化率降低)、产品功能迭代(功能迭代等引起某类用户不满)、运营策略调整(最近新上的运营活动没达成目标)、突发技术故障(突发的产品技术问题导致产品使用故障)。
遵循短期变化找内因、长期异动找外因的原则。结合业务经验确定几个最可能的假设,并给出假设的优先级,通过数据逐一排查验证,最终定位到原因。
第五步:预测趋势
定位到原因后,还要预测指标接下来的走势,下跌会持续到什么时间,最坏能下跌到何种程度。将以上分析结论反馈给业务方后,探讨解决方案,并落地执行,最终解决该问题。
以下是使用ChatGPT Prompt来逐步完成某App日活(DAU)异常下降分析的案例。根据上面的指标异动分析思路,我们将一步步通过Prompt,生成每个环节的Python分析代码示例。注意:ChatGPT输出的代码仅为示例,重在展示该分析方法的实操过程,以加深大家对该方法的理解,大家可根据实际的业务场景修改后使用。
案例:某App的日活用户(DAU)在过去一周出现了显著下降,需要通过数据分析确认问题的根源,评估影响,并提出解决方案。
第一步:确认数据源的准确性
Prompt示例:“请检查以下日志和数据源,确认是否存在数据埋点错误或接口请求失败的情况。”
ChatGPT输出的代码如下,仅供示意参考。
Python
# 读取数据日志import pandas as pd
log_data = pd.read_csv('log_data.csv')
# 检查是否有接口请求失败的记录
failed_requests = log_data[log_data['status_code'] != 200]
print("失败的接口请求:\n", failed_requests)
# 检查埋点错误
missing_events = log_data[log_data['event'].isnull()]
print("缺失的事件记录:\n", missing_events)
解释:通过此步骤,确认是否有指标异动是由技术层面(如埋点错误或接口失败)导致的。若数据源无误,进入下一步分析。
第二步:评估指标异常程度及影响
Prompt示例:“请生成Python代码,计算本周与上周同期的日活下降幅度,并检查日活下降的持续时间。”
ChatGPT输出的代码如下,仅供示意参考。
Python
# 读取日活数据
dau_data = pd.read_csv('dau_data.csv')
# 计算环比下降幅度
dau_data['dau_change'] = dau_data['dau'].pct_change() * 100 #找出持续下降的天数
dau_data['is_decline'] = dau_data['dau_change'] < 0
continuous_decline_days = dau_data['is_decline'].cumsum().max()
print(f"持续下降天数:{continuous_decline_days} 天")
print("每日环比变化:\n", dau_data[['date', 'dau_change']])
解释:通过计算环比变化和持续下降天数,初步判断指标下降是否超出了合理范围,并明确其严重程度。
第三步:拆解数据指标
Prompt示例:“请将日活用户数据按新增用户、老用户留存和流失用户回流拆解,并分别按渠道、平台和地区进一步细化。”
ChatGPT输出的代码如下,仅供示意参考。
Python
# 读取用户数据
user_data = pd.read_csv('user_data.csv')
# 拆解用户数据
new_users = user_data[user_data['user_type'] == 'new']
retained_users = user_data[user_data['user_type'] == 'retained']
returned_users = user_data[user_data['user_type'] == 'returned']
# 分别按渠道、平台和地区拆解
channel_analysis = new_users.groupby('channel')['user_id'].count()
platform_analysis = retained_users.groupby('platform')['user_id'].count()
region_analysis = returned_users.groupby('region')['user_id'].count()
print("按渠道拆解:\n", channel_analysis)
print("按平台拆解:\n", platform_analysis)
print("按地区拆解:\n", region_analysis)
解释:通过拆解指标,能够明确是哪一部分用户(新增、老用户、回流用户)导致了日活下降,并进一步分析问题的来源。
第四步:做出假设,分析验证
Prompt示例:“请生成Python代码,结合运营活动、产品功能和渠道数据,验证以下假设:‘是否某运营活动或渠道的变动导致了日活下降’。”
ChatGPT输出的代码如下,仅供示意参考。
Python
# 读取运营活动数据
events_data = pd.read_csv('events_data.csv')
# 检查活动期间的DAU
event_dau = events_data.merge(dau_data, on='date')
print("活动期间的DAU:\n", event_dau)
# 读取渠道转化数据
channel_data = pd.read_csv('channel_data.csv')
channel_performance = channel_data.groupby('channel')['conversion_rate'].mean()
# 检查转化率的变化
conversion_drop = channel_performance[channel_performance < 0.05]
print("转化率下降的渠道:\n", conversion_drop)
解释:通过分析运营活动数据和渠道转化率,验证是否有活动或渠道的变动导致了日活下降。
第五步:预测趋势,提出解决方案
Prompt示例:“请基于当前数据预测未来一周的日活趋势,并生成Python代码进行预测分析。”
ChatGPT输出的代码如下,仅供示意参考。
Python
from statsmodels.tsa.holtwinters import ExponentialSmoothing
# 使用霍尔特-温特斯法进行趋势预测
model = ExponentialSmoothing(dau_data['dau'], trend='add', seasonal=None)
fit_model = modelfit()
# 预测未来7天的DAU
forecast = fit_modelforecast(7)
print("未来7天的DAU预测:\n", forecast)
解释:通过趋势预测,可以判断指标的下降是否会持续,并提出应对策略。
数据指标异常波动的分析框架如下。
第一步:确认数据源的准确性;
第二步:评估指标异常程度及影响;
第三步:拆解数据指标;
第四步:做出假设,分析验证;
第五步:预测趋势。
在实际业务中,指标异常波动类问题比较常见,而且原因可能是多方面的,这就需要大家在平时工作中多留意数据变化,随着对业务的熟悉和数据敏感度的提升,对数据的异常分析也会越来越熟练,更快地找到问题所在。