网站试听用户活跃度

2020-08-23  本文已影响0人  风图莫

网站试听用户活跃度

RFE模型

背景

​ 与运营和销售同事一起讨论,对试听课的用户进行试听活跃度分析,了解用户的 活跃行为,建立模型,利用模型输出 结果,为营销活动提供决策依据。评估用户的价值层级,提升试听用户活跃度

​ 选用 ** 最近一个月 ** 的试听用户记录,将最近一次登录时间、试听频率、试听时长,作为客户价值的衡量标准;连接数据库,提取试听用户信息,根据 RFE模型需求,进行数据清洗,整理出客户的特征信息 汇总所有数据,数据预 处理,处理缺失值,异常值;

实现过程

# 1.最近一次访问时间(间隔)
# 1.时间间隔
data_merge['date_interval'] = data_merge['max_year_date']-data_merge['访问日期']
# 2.将时间间隔 转为数字
data_merge['date_interval'] = data_merge['date_interval'].apply(lambda x:x.days)


# 2./ F /E

rfe_gb = data_merge.groupby(['year','用户ID'],as_index=False).agg(
    {'date_interval': 'min',  # 计算最近一次订单时间   R
     '访问日期': 'count', # 计算访问频率
     '访问时长': 'sum'})  # 计算问总时长

# 重命名列名
rfe_gb.columns = ['用户ID','r','f','e']
r_bins = [-1,2, 15, 32]
f_bins = [0, 2, 5, 130]
e_bins = [1, 169, 12199, 206252]

# RFE 得分计算
rfe_gb["R_socre"] = pd.cut(rfe_gb['r'], r_bins, labels = [3,2,1])
rfe_gb["F_score"] = pd.cut(rfe_gb['f'], f_bins, labels = [1,2,3])
rfe_gb["E_socre"] = pd.cut(rfe_gb['e'], e_bins, labels = [1,2,3])
#  将 积分商城得分拼接进来
rfe_merge = pd.merge(rfe_gb, data[-1], on = '用户ID', how = "inner")
rfe_merge.head()

#  将 积分商城得分 化为5箱

# 使用随机森林, 泛化性能好,
RFC_model = RandomForestClassifier()
RFC_model.fit(rfe_merge[['r','f','e']], rfe_merge[["积分等级"]])
weights = RFC_model.feature_importances_
print('特征重要性: {}'.format(RFC_model.feature_importances_))

#特征重要性: [0.40729642 0.00584036 0.58686323]
rfe_gb['rfe_score'] = rfe_gb['R_socre'] * weights[0] + rfe_gb['F_score'] * weights[1] + rfe_gb['E_socre'] * weights[2]
#转换数据类型 --str容易拼接

rfe_gb[['R_socre', 'F_score','E_socre']] = rfe_gb[['R_socre','F_score','E_socre']].astype(np.str)
image.png image.png
# 数据库信息
config = {'host': 'x.x.x.x,  # 
          'user': '用户名',  # 
          'password': '密码',  # 密码
          'port': 3306,  # 端口,默认为3306
          'database': 'test',  # 数据库名称
          'charset': 'utf8'  # 字符编码
          }

# 建表操作
con = pymysql.connect(**config)  # 建立mysql连接
cursor = con.cursor()  # 获得游标
cursor.execute("show tables")  # 查询表
table_list = [t[0] for t in cursor.fetchall()]  # 读出所有库
# 查找数据库是否存在目标表,如果没有则新建
table_name = 'sales_rfe_score'  # 要写库的表名
if not table_name in table_list:  # 如果目标表没有创建
    cursor.execute('''
    CREATE TABLE %s (
    userid               VARCHAR(20),
    r_score               int(2),
    f_score              int(2),
    e_score              int(2),
    rfe_score              DECIMAL(10,2),
    rfe_group              VARCHAR(10),
    insert_date              VARCHAR(20)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    ''' % table_name)  # 创建新表

write_db_data = rfe_gb[['用户ID','r_score','f_score','e_score','rfe_score','rfe_group']] # 主要数据
timestamp = time.strftime('%Y-%m-%d', time.localtime(time.time()))  # 日期
# 写库
for each_value in write_db_data.values:
    insert_sql = "INSERT INTO `%s` VALUES ('%s',%s,%s,%s,%s,'%s','%s')" % \
                 (table_name, each_value[0], each_value[1], each_value[2], \
                  each_value[3],each_value[4],each_value[5],
                  timestamp)  # 写库SQL依据
    cursor.execute(insert_sql)  # 执行SQL语句,execute函数里面要用双引号
    con.commit()  # 提交命令
cursor.close()  # 关闭游标
con.close()  # 关闭数据库连接

image.png
上一篇 下一篇

猜你喜欢

热点阅读