商业数据分析实战(酒卷隆志/里洋平)
第七章 案例5——逻辑回归分析:根据过去的行为能否预测当下
从非智能手机更换到智能手机的分析
我们怀疑很多《垂钓乐园》游戏的用户从非智能手机更换到智能手机后,过去使用的游戏账号可能不能继续在新的手机上使用了。因此需要根据之前用户的访问情况来预估一下到底有多少用户因为这个原因流失了,那么我们应该怎么办呢?
7.1期望增加游戏的智能手机用户量
《垂钓乐园》游戏用户量减少的问题
非智能手机用户量减少主要是由移动终端市场的变化所致
用智能手机用户量的自增加来弥补非智能手机用户量的减少
7.2是用户账号迁转设定失败导致的问题吗
思考非智能手机用户流失的结构
游戏账号迁转设定失败导致用户流失的假设
7.3在数据不包含正解的情况下收集数据
用户自然流失和账号迁移设定失败导致的用户流失有何不同
在无法获得包含正解的数据的情况下进行建模
分析过程治整理
使用哪种模型
用曲线来拟合“账号迁转”比例
数据加工
1)、数据加载
# 加载数据
filepath = 'E:\\Download\\data_analysis\\data'
os.chdir(filepath)
dau = pd.read_csv("section7-dau.csv")
#按月、用户ID、设备类型去重
mau = dau.drop_duplicates(['region_month', 'user_id', 'device'])
mau['is_access'] = 1
tmp_mau = mau.pivot_table(index='user_id', columns=['region_month', 'device'], values='is_access').reset_index()
tmp_mau.columns=['user_id','2013_01_FP','2013_01_SP','2013_02_FP','2013_02_SP']
#筛选1月用非智能手机登录过的用户
tmp_res = tmp_mau[tmp_mau['2013_01_FP'].notnull()].reset_index(drop=True)
tmp_res.fillna(0, inplace=True)
2)、添加辅助列
#添加is_access标识第二个月是否来过
def is_access(a, b, c, d ):
if (a == 1 or b ==1) and (c==1 or d==1):
return 1
else:
return 0
#第二个月是否来过
tmp_res['is_access'] = tmp_res.apply(lambda x: is_access(x['2013_01_FP'],x['2013_01_SP'],x['2013_02_FP'],x['2013_02_SP']), axis=1)
def is_fp(a, b):
if a == 1 and b ==1:
return 1
else:
return 0
#添加is_fp标识第二个月是否用非智能手机登录
tmp_res['is_fp'] = tmp_res.apply(lambda x: is_fp(x['2013_01_FP'],x['2013_02_FP']), axis=1)
#添加is_fp标识第二个月是否用智能手机登录
tmp_res['is_sp'] = tmp_res.apply(lambda x: is_fp(x['2013_01_FP'],x['2013_02_SP']), axis=1)
3)、数据转换
# COLUMNS 名字
b = []
for a in np.arange(1,32):
b.append('X'+str(a)+'day')
# b.insert(0,'user_id')
#获取1月份用户登录信息
dau_fp_1 = dau[(dau.device=='FP') & (dau.region_month=='2013-01')]
dau_fp_1['is_access'] = 1
# 透视表转化
fp_dau_pivot = pd.pivot_table(dau_fp_1, values='is_access', columns='region_day', index='user_id', fill_value=0)
fp_dau_pivot.columns = b
fp_dau_pivot.reset_index(inplace=True)
#
fp_dau_m = pd.merge(fp_dau_pivot, tmp_res[(tmp_res.is_access==0) | (tmp_res.is_sp == 1)][['user_id','is_sp']], on='user_id', how='inner')
7.4验证是否能够建立模型
建立模型和验证模型
使用逻辑回归分析来建立模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(solver='lbfgs',C=10)
x = fp_dau_m.iloc[:,1:-1]
y = fp_dau_m.iloc[:,-1]
lr.fit(x,y)
print('系数项:',lr.coef_)
print('截距项:',lr.intercept_)
print('得分是:',lr.score(x,y))
从分析结果来探讨模型
使用建立的模型进行预测
yp = lr.predict_proba(x)[:,1]
df = fp_dau_m.copy()
df['prob'] = yp
df['pred'] = df['prob'].apply(lambda x: 1 if x > 0.5 else 0)
df.groupby(['is_sp','pred'])['user_id'].count().reset_index()
is_sp pred user_id
0 0 0 186
1 0 1 4
2 1 0 17
3 1 1 25