假设:
- 不考虑无交互的行为(即用户突然听新歌的行为)
- 不考虑用户规模的问题
- 若考虑实际用户规模大于user表规模,则做二级的回归:第一级首先对用户-歌曲的每日听歌量进行回归,第二级是根据user表中的听歌量预测总用户的听歌量
数据处理:
- 暂时不用数据库,直接文件操作
TODOs:
- 数据集分布的统计
- 初步的原始特征处理
特征工程:
- 计算两天delta播放量,发散开就是歌曲沿时间线上的播放、下载、收藏的变化量。
TODOs:
-
@jiaying 艺人维度上的指标,包括:
艺人歌曲发行量, 平均歌曲发行周期(天), 平均初始播放数, 语言0, 语言1, 语言2, 语言3, 语言4, 语言>=5, 性别
-
@xiaojiang 用户维度上的指标,包括:
用户单日播放数,单日下载数,单日收藏数,三日播放数,三日下载数,三日收藏数,七日播放数,七日下载数,七日收藏数,月播放数,月下载数,月收藏数
。此外,统计歌曲沿时间线上的下载、收藏、播放数变化。具体指标请后续补充在此, -
@jiawei 工具类,完成了csv自动读为dict的工具。做
用户-天级别的行为统计
、歌曲-天级别的行为统计
。与小江的部分重合,已完成。
注:第一步可做如下统计:uid, date, action_type
, 第二步建立在第一步基础上: uid, daily_play, daily_download, daily_collection, ...
,保留中间结果以供后续使用。
最终我们将评估各指标覆盖率、准确率、区分度,选择觉得有帮助的指标作为模型输入。
###2016.05.13讨论
1.目前进展:完成了一级指标的初步统计,到目前为止晓江这边的工作进度有点慢。
2.预测方法的初步确立:
approach1:
根据歌曲历史播放做回归,然后统计每个艺人所对应的所有歌曲的预测之和作为该歌手的播放预测量。这里要建立一个歌手,歌曲,时间轴上的历史行为的一个vec。
approach2:
将最后的预测分为两个子问题进行求解,首先是一个分类问题,判断在数据集的用户上,即用户在某日是否会听某首歌曲。其次,做一个回归问题,判断听这首歌曲的用户会听几次。
- 线性回归效果不好,弃用
- 采用二分类方法,判断<用户x艺人>是否会听(LR分类)
- 听歌周期
- 每日听歌量
- 50维的艺人喜好度(暂时简单的统计)
- 发歌周期
- 歌曲数(歌曲越多的艺人更容易被听)
- 艺人类别(性别、语言等)
- 类别(k维?)
- 平均每日被听数
除上述vec外,增加艺人最近是否热门(待定,需全局统计,可能不好做)。是否不考虑用户某段时间内的听歌习惯突变(突然喜欢听歌了,突然弃用虾米了,etc)
- 直接用回归模型预测连续值是否可行
- 如果1不可行,如何预测。
- 根据基础模型的输出,人为设定播放量。举例说明:已获得分类模型用户对艺人某日收听的概率值,根据概率值划分出[不收听,轻度收听,中度收听,重度收听],进而人为映射出对该艺人播放量的贡献[0, 10, 30, 50]
- 模型融合,根据基础模型的输出(收听概率),加上其他一些特征,输入到某回归模型,输出播放量,具体方法可采用 stacking learning
最终选型为分解子问题:
1.分类模型预测用户是否会听某首歌
2.使用预设值/均值/模型学习预测对某首歌的收听量
主要用于刻画:
- 用户类型(重度中度轻度)
- 历史播放、历史收藏、历史下载,听歌频率、听歌天数频率,用户日均播放数、日均歌曲数等
- 风格偏好
- 语言Top3、5、7,艺人性别偏好概率
输出key为user_id
的csv文件
- 歌曲相似度(词向量)
- 歌曲主题(LDA主题模型)
- 歌曲热度
- 歌曲初始播放数
- 歌曲日均播放次数、下载次数、收藏次数
- 歌曲日均播放人次、下载人次、收藏人次
- 歌曲播放间隔(每隔多少天被播放)
- 歌曲收听天数占比(x/180)
- 歌曲重复收听率(重复收听人数/总收听人数)
输出key为song_id
的csv文件
主要用于刻画:
- 艺人热度
- 艺人曲均初始播放数,艺人总播放数
- 艺人日均播放次数、下载次数、收藏次数
- 艺人日均播放人次、下载人次、收藏人次
- 艺人播放间隔(每隔多少天被播放)
- 艺人收听天数占比(x/180)
- 艺人重复收听率(重复收听人数/总收听人数)
- 艺人风格
- 艺人发行歌曲数
- 艺人歌曲发行周期
- 艺人发歌类型(语言概率)
输出key为artist_id
的csv文件
- 数值特征
- 7,3,1day plays<uid,sid> 表征用户对该歌曲喜爱程度
- 7,3,1day plays<uid> 标称用户最近使用频率
- 7,3,1day plays<sid> 表征歌曲近期热门程度
- 其他近期特征
- 比率特征
- 7,3,1day 收听天数<uid,sid> 占比
- 7,3,1day 收听次数<uid,sid> / 收听次数<uid>
- 二值特征
- is_download
- is_collect
输出key为user_id,song_id,date
的csv文件
最终特征选取:
- 基础特征
- 历史特征(用户画像,歌曲画像,艺人画像),历史特征一般选择与播放强相关的;
- 近期特征(用户X歌曲),近期特征可扩展至与播放弱相关的特征;
- 今天讨论决定把用户x歌曲 改成 用户x艺人。特征选取上做着重刻画出艺人的画像。
- 正负样本的选取问题的确定
####正负样本选取问题(确定)
以(用户,艺人,时间)为一个样本的key,样本为用户在指定时间点上有操作,诸如收藏,下载,播放等动作,然后将歌曲维度对应到艺人维度,但是对于特定的艺人来说,用户没有播放该艺人的歌曲作为该艺人对应key的负样本,用户播放过该艺人的歌曲为该艺人对应key的正样本。
####接下来的任务安排
*@xiaojaing继续做用户画像的特征提取 + 样本标注工作
*@jiaying 继续完成艺人画像的特征提取 + 样本标注工作
*@jiawei 继续完成用户x艺人的画像工作 +样本标注工作
####待解决的问题 用户口味的标识,模型做成一个全局的还是一个近期模型
目前有一feature表示用户最喜好的language,值为language的label序号,为了将序号变成有意义的值,决定对序号使用one-hot编码
(100维)
为了把绝对值形式的艺人播放数转为0~1之间的float,拟采用某种归一化方法,具体为:
- 求得所有艺人的播放数均值
mean_all_plays
,标准差std_all_plays
- 该艺人的播放数
artist_plays
- 归一化值=
artist_plays
/(mean_all_plays
+2*std_all_plays
) - 试试latex语法:
$artist_play_value=\frac{artist_plays}{mean_all_plays+2 * std_all_plays}$
将绝对值(近期播放数)转为0~1之间的float,具体步骤:
- 求得近期所有艺人的播放数
all_artist_plays
- 该艺人近期的播放数
artist_plays
- 直接求
artist_pop_rate
=artist_plays
/all_artist_plays
- 补充:后期可以考虑加权算法,不仅仅是相对的比值表示热门,还要考虑大于某个阈值才算热门的情况
指标名称 | col_name | 详细 | 典型值 |
---|---|---|---|
性别 | gender | 表征艺人风格 | |
最擅长的歌曲语言 | favor_language | 艺人发行所有歌曲中占比最高的语言种类,表征艺人风格 | |
表征艺人风格 | 0 否,1 是; 选择度太低,全为1 | ||
艺人歌曲发行量(归一化) | song_num_normalized | artist_id 对应的 song_id | |
艺人歌曲发行周期(归一化) | avg_publish_cycle_normalized | 艺人每间隔多少天发行一首歌曲 | |
艺人被收听天数 / 总天数 | 选择度太低,全为1 | ||
艺人平均歌曲初始播放数(归一化) | avg_song_init_plays_normalized | 该艺人所有歌曲的平均出事播放数,表征流行度 | max:790977 |
艺人歌曲日均播放数(归一化) | play_pv_daily_normalized | 表征流行度 | |
艺人歌曲日均播放用户数(归一化) | play_uv_daily_normalized | 表征流行度 | |
日均播放歌曲数在总发行数的占比 | play_song_cnr_rate_daily | 日均播放歌曲数/艺人发行总歌曲数,表征流行度 | mean:0.366, std:0.245, median:0.319, min:0.032, max:0.919 |
指标名称 | col_name | 详细 | 典型值 |
---|---|---|---|
用户播放数量(归一化) | user_play_cnt | 用户播放的数量 | |
用户播放的天数占比 | user_play_days | 用户播放的天数 / 历史数据总天数 | |
用户播放的间隔(归一化) | user_play_cycle | 用户播放的平均间隔 | |
用户播放的歌曲数(归一化) | user_play_songs | 用户播放的歌曲数 | |
用户每天播放的歌曲数(归一化) | user_play_songs_daily | 用户平均每天播放的歌曲数 | |
用户每天播放数量(归一化) | user_play_times_daily | 用户平均每天播放的次数 | |
最喜爱的语言(one-hot) | top1_language | 用户最喜爱的语言 | |
是否喜爱多种语言 | is_multi_language | 用户是否有多种喜欢的语言 | |
用户对男艺人的喜爱程度 | p1_gender | 用户对男艺人的喜爱程度 | |
用户对女艺人的喜爱程度 | p2_gender | 用户对女艺人的喜爱程度 | |
用户对乐队的喜爱程度 | p3_gender | 用户对乐队的喜爱程度 |
指标名称 | 详细 | 典型值 |
---|
- dummy code
- conjunction dummy code
- 表记录时间范围: 20150301-20150830, 共183天
- user_actions表的行为总数:5650000+(10000区间)
- user_actions涉及的用户总数:349946
- user_actions涉及的歌曲总数:10278
- songs涉及的艺人总数: 50
- songs涉及的歌曲总数:10842
指标名称 | 详细 | 典型值 |
---|---|---|
艺人个数 | 艺人 unique id num | 50 |
艺人歌曲发行量 | artist_id 对应的 song_id | mean:216, median:118, min:10, max:1861 |
艺人歌曲发行周期 | 艺人每间隔多少天发行一首歌曲 | mean:32, median:27, min:7, max:117 |
艺人平均歌曲初识播放数 | 该艺人所有歌曲的平均出事播放数,表征初识热度 | mean:64865, median:27944, min:1151, max:790977 |
语言占比 | ||
交互天数占比 | 有交互天数/总天数 | mean:1, std:0.003108, 区分度太小,弃用 |
日均播放歌曲数在总发行数的占比 | 日均播放歌曲数/艺人发行总歌曲数 | mean:0.366, std:0.245, median:0.319, min:0.032, max:0.919 |
附 0513第一次统计结果
艺人歌曲发行量 平均歌曲发行周期(天) 平均初始播放数 语言0 语言1 \
count 50.000000 50.000000 50.000000 50.000000 50.000000
mean 216.840000 32.514803 64865.524730 0.380000 38.840000
std 304.591152 21.246564 126422.297982 1.614855 89.206333
min 10.000000 7.381579 1151.985915 0.000000 0.000000
25% 55.500000 18.420254 12488.993810 0.000000 0.000000
50% 118.500000 27.074269 27944.795960 0.000000 0.000000
75% 233.000000 39.670721 56761.809210 0.000000 28.250000
max 1861.000000 117.750000 790977.363636 9.000000 434.000000
语言2 语言3 语言4 语言>=5 性别
count 50.000000 50.000000 50.000000 50.000000 50.000000
mean 62.040000 15.500000 60.580000 39.500000 1.880000
std 146.255711 36.836234 280.351026 94.289664 0.746147
min 0.000000 0.000000 0.000000 0.000000 1.000000
25% 0.000000 0.000000 0.000000 0.000000 1.000000
50% 0.000000 0.000000 0.000000 0.000000 2.000000
75% 56.750000 0.000000 0.000000 10.000000 2.000000
max 685.000000 152.000000 1861.000000 481.000000 3.000000
附 0520第二次统计结果
play_pv download_pv collect_pv play_uv download_uv \
count 50.000000 50.000000 50.000000 50.000000 50.000000
mean 95672.060000 16248.540000 1124.040000 45104.440000 7392.580000
std 100704.745447 21463.189507 1146.533479 44232.150622 7550.493637
min 2805.000000 197.000000 9.000000 795.000000 99.000000
25% 22211.000000 3994.750000 412.750000 13063.000000 2075.250000
50% 60943.000000 9373.500000 854.000000 32288.500000 4808.500000
75% 137335.000000 17993.250000 1342.500000 64715.500000 9468.000000
max 430711.000000 104445.000000 5345.000000 184804.000000 31772.000000
collect_uv play_song_cnt download_song_cnt collect_song_cnt \
count 50.000000 50.000000 50.000000 50.000000
mean 899.400000 8522.700000 4863.560000 662.020000
std 852.720066 8854.666728 6261.185942 562.382595
min 9.000000 566.000000 176.000000 9.000000
25% 351.000000 3983.000000 1722.000000 277.500000
50% 767.500000 5903.500000 3230.000000 574.500000
75% 1118.500000 9933.000000 5037.000000 876.500000
max 3878.000000 45498.000000 32662.000000 2726.000000
play_pv_daily download_pv_daily collect_pv_daily play_uv_daily \
count 50.000000 50.000000 50.000000 50.000000
mean 522.804993 88.790317 6.142317 246.474291
std 550.292711 117.284821 6.265188 241.703757
min 15.670391 1.100559 0.050279 4.441341
25% 121.371585 21.829235 2.255464 71.382514
50% 333.021858 51.221311 4.666667 176.439891
75% 750.464481 98.323770 7.336066 353.636612
max 2353.612022 570.737705 29.207650 1009.857923
download_uv_daily collect_uv_daily play_song_cnt_daily \
count 50.000000 50.000000 50.000000
mean 40.396854 4.914776 46.573513
std 41.259290 4.659649 48.384890
min 0.553073 0.050279 3.162011
25% 11.340164 1.918033 21.765027
50% 26.275956 4.193989 32.259563
75% 51.737705 6.112022 54.278689
max 173.617486 21.191257 248.622951
download_song_cnt_daily collect_song_cnt_daily
count 50.000000 50.000000
mean 26.577260 3.617618
std 34.213803 3.073103
min 0.983240 0.050279
25% 9.409836 1.516393
50% 17.650273 3.139344
75% 27.524590 4.789617
max 178.480874 14.896175
附 0520第三次统计结果
l0_rate l1_rate l2_rate l3_rate l4_rate l5_rate(语言5以上的) \
count 50.000000 50.000000 50.000000 50.000000 50.000000 50.000000
mean 0.007166 0.199299 0.319676 0.238209 0.079417 0.156233
std 0.030748 0.354797 0.455078 0.428375 0.243202 0.315054
min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
50% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
75% 0.000000 0.245665 0.961561 0.000000 0.000000 0.152258
max 0.184211 1.000000 1.000000 1.000000 1.000000 1.000000
day_actioned day_actioned_rate play_song_cnt_rate_daily \
count 50.000000 50.000000 50.000000
mean 182.920000 1.005055 0.366078
std 0.565685 0.003108 0.245726
min 179.000000 0.983516 0.032205
25% 183.000000 1.005495 0.149067
50% 183.000000 1.005495 0.319431
75% 183.000000 1.005495 0.497469
max 183.000000 1.005495 0.919308
download_song_cnt_rate_daily collect_song_cnt_rate_daily
count 50.000000 50.000000
mean 0.205968 0.038786
std 0.174563 0.044098
min 0.013298 0.001039
25% 0.077216 0.012838
50% 0.163781 0.021797
75% 0.282305 0.046913
max 0.726031 0.256334
TODO:
- 统计艺人有用户交互天数,及占比 Done
- 细化语言占比,性别占比 Done
- 播放歌曲占比等比值特征
##用户维度
指标名称 | 详细 | 典型值 |
---|---|---|
用户个数 | 用户 unique ID | 349946 |
用户行为数量 | 用户下载/播放/收藏的数量之和 | mean : |
用户行为歌曲数量 | 用户下载/播放/收藏的歌曲数量之和 | |
用户行为天数 | 用户下载/播放/收藏的天数之和 | |
用户播放次数 | 用户播放的次数 | |
用户下载次数 | 用户下载的次数 | |
用户收藏次数 | 用户收藏的次数 | |
用户播放天数 | 用户播放的天数 | |
用户下载天数 | 用户下载的天数 | |
用户收藏天数 | 用户收藏的天数 | |
用户播放的歌曲数 | 用户播放的歌曲数量 | |
用户下载的歌曲数 | 用户下载的歌曲数 | |
用户收藏的歌曲数 | 用户收藏的歌曲数 | |
用户平均每天播放歌曲数 | 用户平均每天播放歌曲数 | |
用户平均每天下载歌曲数 | 用户平均每天下载歌曲数 | |
用户平均每天收藏歌曲数 | 用户平均每天收藏歌曲书 | |
用户平均每天播放次数 | 用户平均每天播放次数 | |
用户平均每天下载次数 | 用户平均每天下载次数 | |
用户平均每天收藏次数 | 用户平均每天收藏次数 | |
top1_language | 第一喜爱的语言 | |
top2_language | 第二喜爱的语言 | |
top3_language | 第三喜爱的语言 | |
top4_language | 第四喜爱的语言 | |
top5_language | 第五喜爱的语言 | |
p1_gender | 喜爱性别1的概率 | |
p2_gender | 喜爱性别2的概率 | |
p3_gender | 喜爱性别3的概率 |
用户行为数量 用户行为歌曲数 用户行为天数 用户播放次数 \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 16.151726 4.843282 6.063998 13.669546
std 48.529671 10.067354 9.512787 44.068712
min 1.000000 1.000000 1.000000 0.000000
25% 2.000000 1.000000 1.000000 1.000000
50% 4.000000 2.000000 2.000000 3.000000
75% 13.000000 5.000000 7.000000 11.000000
max 4811.000000 1396.000000 159.000000 3750.000000
用户下载次数 用户收藏次数 用户播放天数 用户下载的天数 \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 2.321578 0.160602 5.564161 0.807667
std 14.425570 0.916596 9.363587 1.337075
min 0.000000 0.000000 0.000000 0.000000
25% 0.000000 0.000000 1.000000 0.000000
50% 0.000000 0.000000 2.000000 0.000000
75% 2.000000 0.000000 6.000000 1.000000
max 4607.000000 90.000000 158.000000 70.000000
用户收藏的天数 用户播放的歌曲数 用户下载的歌曲数 用户收藏的歌曲数 \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 0.120876 3.855992 1.950701 0.154838
std 0.557038 6.859920 8.163503 0.869254
min 0.000000 0.000000 0.000000 0.000000
25% 0.000000 1.000000 0.000000 0.000000
50% 0.000000 2.000000 0.000000 0.000000
75% 0.000000 4.000000 2.000000 0.000000
max 51.000000 340.000000 1396.000000 65.000000
用户平均每天播放歌曲数 用户平均每天下载歌曲数 用户平均每天收藏歌曲数 用户平均每天播放次数 \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 0.904335 1.206660 0.098707 1.759374
std 1.124147 4.950833 0.453995 3.096828
min 0.000000 0.000000 0.000000 0.000000
25% 0.343750 0.000000 0.000000 1.000000
50% 1.000000 0.000000 0.000000 1.111111
75% 1.000000 1.000000 0.000000 2.000000
max 66.000000 1113.000000 44.000000 513.400000
用户平均每天下载次数 用户平均每天收藏次数 top1_language top2_language \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 1.326331 0.101783 7.202586 4.968029
std 5.271532 0.472340 19.695692 19.743699
min 0.000000 0.000000 0.000000 -1.000000
25% 0.000000 0.000000 1.000000 -1.000000
50% 0.000000 0.000000 2.000000 -1.000000
75% 1.000000 0.000000 4.000000 3.000000
max 1113.000000 44.000000 100.000000 100.000000
top3_language top4_language top5_language p1_gender \
count 349946.000000 349946.000000 349946.000000 349946.000000
mean 2.270467 0.507458 -0.480111 0.331386
std 15.866088 11.289265 6.762816 0.398178
min -1.000000 -1.000000 -1.000000 0.000000
25% -1.000000 -1.000000 -1.000000 0.000000
50% -1.000000 -1.000000 -1.000000 0.086957
75% -1.000000 -1.000000 -1.000000 0.666667
max 100.000000 100.000000 100.000000 1.000000
p2_gender p3_gender
count 349946.000000 349946.000000
mean 0.422971 0.245643
std 0.420940 0.374749
min 0.000000 0.000000
25% 0.000000 0.000000
50% 0.333333 0.000000
75% 1.000000 0.454545
max 1.000000 1.000000
指定某个日期date
,U用户
,A艺人
条件下:
指标名称 | 详细 | 备注 |
---|---|---|
one_u_a_plays | U在前1天内播放了A的歌曲次数 | |
three_u_a_plays | U在前3天内播放了A的歌曲次数 | |
seven_u_a_plays | U在前7天内播放了A的歌曲次数 | |
one_u_plays | U在前1天内播放的所有艺人的歌曲次数 | |
three_u_plays | U在前3天内播放的所有艺人的歌曲次数 | |
seven_u_plays | U在前7天内播放的所有艺人的歌曲次数 | |
one_a_plays | A的所有歌曲在前1天内被所有用户播放的次数和 | 绝对值,无法体现热门程度,后续考虑比值 |
three_a_plays | A的所有歌曲在前3天内被所有用户播放的次数和 | 绝对值,无法体现热门程度,后续考虑比值 |
seven_a_plays | A的所有歌曲在前7天内被所有用户播放的次数和 | 绝对值,无法体现热门程度,后续考虑比值 |
one_u_a_plays_days | U在前1天内播放A歌曲的天数 | |
three_u_a_plays_days | U在前3天内播放A歌曲的天数 | |
seven_u_a_plays_days | U在前7天内播放A歌曲的天数 | |
one_u_a_play_rate | U在前1天内播放A的歌曲次数/U前1天内播放的所有艺人的歌曲次数 | |
three_u_a_play_rate | U在前3天内播放A的歌曲次数/U前3天内播放的所有艺人的歌曲次数 | |
seven_u_a_play_rate | U在前7天内播放A的歌曲次数/U前7天内播放的所有艺人的歌曲次数 | |
is_download | U在D日期前是否下载了A的歌曲 | 这个直接从song变成了artist,似乎效果减弱了 |
is_collect | U在D日期前是否收藏了A的歌曲 | 这个直接从song变成了artist,似乎效果减弱了 |
近期特征 :最后5列 + U在前(1,3,7)天内播放A歌曲的天数的比列作为模型的近期输入特征。
特征合并:先从样本和近期文件里筛选出金两周的数据,然后再join画像(全局)特征。
模型输入:rf的输入不用独热编码。