1,场景描述
假设我们是某电商平台的数据分析师,负责分析母婴产品线的用户数据。母婴产品的购买行为具有一定的周期性和生命周期特征,如用户在不同怀孕阶段的需求不同,以及宝宝出生后的不同成长阶段需要不同的产品。
2,具体需求
- 识别高价值用户:通过RFM模型识别高价值用户,重点考虑用户的生命周期(例如:怀孕阶段、新生儿阶段)。
- 标签化用户行为:对用户行为进行标签化,包括季节性、促销活动、节假日事件等。
- 改进模型:针对母婴产品的特性,改进传统RFM模型的不足之处。
3,具体代码
数据模拟
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 模拟用户数据
np.random.seed(42)
user_ids = np.random.randint(1000, 2000, 1000)
dates = pd.date_range(end=datetime.today(), periods=365).to_pydatetime().tolist()
data = {
'user_id': np.random.choice(user_ids, 5000),
'order_date': np.random.choice(dates, 5000),
'amount': np.random.uniform(10, 500, 5000)
}
orders = pd.DataFrame(data)
# 假设部分用户的怀孕周数
orders['pregnancy_week'] = np.where(np.random.rand(5000) > 0.8, np.random.randint(1, 40, 5000), np.nan)
# 生成一些标签,例如季节性、促销活动
orders['season'] = orders['order_date'].apply(lambda x: 'Winter' if x.month in [12, 1, 2] else ('Spring' if x.month in [3, 4, 5] else ('Summer' if x.month in [6, 7, 8] else 'Autumn')))
orders['promotion'] = np.random.choice([0, 1], size=5000, p=[0.7, 0.3])
# 查看模拟数据
orders.head()
RFM 计算
# 当前日期
now = datetime.now()
# 计算RFM值
rfm = orders.groupby('user_id').agg({
'order_date': lambda x: (now - x.max()).days,
'user_id': 'count',
'amount': 'sum'
}).reset_index()
# 重命名列
rfm.columns = ['user_id', 'recency', 'frequency', 'monetary']
# 计算RFM评分
rfm['R'] = pd.qcut(rfm['recency'], 4, ['1', '2', '3', '4'])
rfm['F'] = pd.qcut(rfm['frequency'].rank(method='first'), 4, ['4', '3', '2', '1'])
rfm['M'] = pd.qcut(rfm['monetary'], 4, ['4', '3', '2', '1'])
# 组合RFM得分
rfm['RFM_Score'] = rfm['R'].astype(str) + rfm['F'].astype(str) + rfm['M'].astype(str)
rfm.head()
标签化用户行为和生命周期分析
# 合并用户行为标签
rfm = rfm.merge(orders[['user_id', 'pregnancy_week', 'season', 'promotion']], on='user_id', how='left')
# 根据怀孕周数标签化
def pregnancy_stage(week):
if pd.isna(week):
return 'Unknown'
elif week < 13:
return 'First Trimester'
elif week < 27:
return 'Second Trimester'
else:
return 'Third Trimester'
rfm['pregnancy_stage'] = rfm['pregnancy_week'].apply(pregnancy_stage)
# 计算用户在不同季节和促销活动中的消费
seasonal_promotion_agg = orders.groupby(['user_id', 'season', 'promotion']).agg({
'amount': 'sum'
}).reset_index()
# 合并
rfm = rfm.merge(seasonal_promotion_agg, on='user_id', how='left', suffixes=('', '_season_promo'))
rfm.head()
4,改进模型
结合具体业务特性,针对母婴产品用户进行更精准的分析:
- 用户生命周期分析:重点分析怀孕阶段和宝宝成长阶段的用户需求。
- 行为标签:考虑用户在不同季节和促销活动中的消费习惯。
通过这样的改进,可以更精准地识别高价值用户和潜在流失用户,为制定营销策略提供数据支持。
# 模拟分析结果
# 查看高价值用户
high_value_users = rfm[rfm['RFM_Score'] == '444']
# 查看高风险流失用户
high_risk_users = rfm[rfm['RFM_Score'] == '111']
# 根据怀孕阶段细分用户群体
first_trimester_users = rfm[rfm['pregnancy_stage'] == 'First Trimester']
second_trimester_users = rfm[rfm['pregnancy_stage'] == 'Second Trimester']
third_trimester_users = rfm[rfm['pregnancy_stage'] == 'Third Trimester']
# 分析用户在不同季节和促销活动中的消费行为
seasonal_promotion_analysis = rfm.groupby(['season', 'promotion']).agg({
'amount': 'sum',
'user_id': 'nunique'
}).reset_index()
# 结果展示
print("高价值用户:")
print(high_value_users)
print("\\n高风险流失用户:")
print(high_risk_users)
print("\\n第一孕期用户:")
print(first_trimester_users)
print("\\n第二孕期用户:")
print(second_trimester_users)
print("\\n第三孕期用户:")
print(third_trimester_users)
print("\\n季节性和促销活动分析:")
print(seasonal_promotion_analysis)
# 建议
print("建议:")
print("1. 针对高价值用户,提供专属优惠和服务,提升用户粘性。")
print("2. 针对高风险流失用户,分析流失原因并采取挽回措施,如发送个性化优惠券。")
print("3. 根据用户怀孕阶段,推荐相应的母婴产品,满足用户特定需求。")
print("4. 在促销活动期间,加强推广力度,吸引更多用户参与消费。")
print("5. 关注季节性消费变化,提前准备相关产品的库存和促销策略。")
(交个朋友/技术接单/ai办公/性价比资源)