Skip to content

Instantly share code, notes, and snippets.

@lujiaying
Last active June 1, 2016 15:28
Show Gist options
  • Save lujiaying/7e791d3a909dd4e466e69ab3ef71631c to your computer and use it in GitHub Desktop.
Save lujiaying/7e791d3a909dd4e466e69ab3ef71631c to your computer and use it in GitHub Desktop.

讨论结果

2016.05.11讨论

假设:

  1. 不考虑无交互的行为(即用户突然听新歌的行为)
  2. 不考虑用户规模的问题
  3. 若考虑实际用户规模大于user表规模,则做二级的回归:第一级首先对用户-歌曲的每日听歌量进行回归,第二级是根据user表中的听歌量预测总用户的听歌量

数据处理:

  1. 暂时不用数据库,直接文件操作

TODOs:

  1. 数据集分布的统计
  2. 初步的原始特征处理

2016.05.12讨论

特征工程:

  1. 计算两天delta播放量,发散开就是歌曲沿时间线上的播放、下载、收藏的变化量。

TODOs:

  1. @jiaying 艺人维度上的指标,包括: 艺人歌曲发行量, 平均歌曲发行周期(天), 平均初始播放数, 语言0, 语言1, 语言2, 语言3, 语言4, 语言>=5, 性别

  2. @xiaojiang 用户维度上的指标,包括:用户单日播放数,单日下载数,单日收藏数,三日播放数,三日下载数,三日收藏数,七日播放数,七日下载数,七日收藏数,月播放数,月下载数,月收藏数。此外,统计歌曲沿时间线上的下载、收藏、播放数变化。具体指标请后续补充在此

  3. @jiawei 工具类,完成了csv自动读为dict的工具。做用户-天级别的行为统计歌曲-天级别的行为统计。与小江的部分重合,已完成

注:第一步可做如下统计:uid, date, action_type, 第二步建立在第一步基础上: uid, daily_play, daily_download, daily_collection, ...,保留中间结果以供后续使用。 最终我们将评估各指标覆盖率、准确率、区分度,选择觉得有帮助的指标作为模型输入。

###2016.05.13讨论

1.目前进展:完成了一级指标的初步统计,到目前为止晓江这边的工作进度有点慢。

2.预测方法的初步确立:

approach1:

根据歌曲历史播放做回归,然后统计每个艺人所对应的所有歌曲的预测之和作为该歌手的播放预测量。这里要建立一个歌手,歌曲,时间轴上的历史行为的一个vec。

approach2:

将最后的预测分为两个子问题进行求解,首先是一个分类问题,判断在数据集的用户上,即用户在某日是否会听某首歌曲。其次,做一个回归问题,判断听这首歌曲的用户会听几次。

2016.5.17讨论

  1. 线性回归效果不好,弃用
  2. 采用二分类方法,判断<用户x艺人>是否会听(LR分类)

特征的初步想法

用户vec特征:
  1. 听歌周期
  2. 每日听歌量
  3. 50维的艺人喜好度(暂时简单的统计)
艺人vec特征:
  1. 发歌周期
  2. 歌曲数(歌曲越多的艺人更容易被听)
  3. 艺人类别(性别、语言等)
(是否使用待定的)歌曲vec:
  1. 类别(k维?)
  2. 平均每日被听数
用户x艺人x日期的vec:

除上述vec外,增加艺人最近是否热门(待定,需全局统计,可能不好做)。是否不考虑用户某段时间内的听歌习惯突变(突然喜欢听歌了,突然弃用虾米了,etc)

重要问题待解决:(2016.5.18已解决)

  1. 直接用回归模型预测连续值是否可行
  2. 如果1不可行,如何预测。
    • 根据基础模型的输出,人为设定播放量。举例说明:已获得分类模型用户对艺人某日收听的概率值,根据概率值划分出[不收听,轻度收听,中度收听,重度收听],进而人为映射出对该艺人播放量的贡献[0, 10, 30, 50]
    • 模型融合,根据基础模型的输出(收听概率),加上其他一些特征,输入到某回归模型,输出播放量,具体方法可采用 stacking learning

2016.5.18讨论

最终选型为分解子问题:

1.分类模型预测用户是否会听某首歌

2.使用预设值/均值/模型学习预测对某首歌的收听量

特征

用户画像 @xiaojiang 后续补充

主要用于刻画:

  • 用户类型(重度中度轻度)
    • 历史播放、历史收藏、历史下载,听歌频率、听歌天数频率,用户日均播放数、日均歌曲数等
  • 风格偏好
    • 语言Top3、5、7,艺人性别偏好概率

输出key为user_id的csv文件

歌曲画像 @jiaying 后续补充

  • 歌曲相似度(词向量)
  • 歌曲主题(LDA主题模型)
  • 歌曲热度
    • 歌曲初始播放数
    • 歌曲日均播放次数、下载次数、收藏次数
    • 歌曲日均播放人次、下载人次、收藏人次
    • 歌曲播放间隔(每隔多少天被播放)
    • 歌曲收听天数占比(x/180)
    • 歌曲重复收听率(重复收听人数/总收听人数)

输出key为song_id的csv文件

艺人画像 @jiaying 后续补充

主要用于刻画:

  • 艺人热度
    • 艺人曲均初始播放数,艺人总播放数
    • 艺人日均播放次数、下载次数、收藏次数
    • 艺人日均播放人次、下载人次、收藏人次
    • 艺人播放间隔(每隔多少天被播放)
    • 艺人收听天数占比(x/180)
    • 艺人重复收听率(重复收听人数/总收听人数)
  • 艺人风格
    • 艺人发行歌曲数
    • 艺人歌曲发行周期
    • 艺人发歌类型(语言概率)

输出key为artist_id的csv文件

用户X歌曲 @jiawei 后续补充,分配任务

  • 数值特征
    • 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歌曲),近期特征可扩展至与播放弱相关的特征;

2016-05-19 讨论

  • 今天讨论决定把用户x歌曲 改成 用户x艺人。特征选取上做着重刻画出艺人的画像。
  • 正负样本的选取问题的确定

####正负样本选取问题(确定)

以(用户,艺人,时间)为一个样本的key,样本为用户在指定时间点上有操作,诸如收藏,下载,播放等动作,然后将歌曲维度对应到艺人维度,但是对于特定的艺人来说,用户没有播放该艺人的歌曲作为该艺人对应key的负样本,用户播放过该艺人的歌曲为该艺人对应key的正样本。

样本格式:user_id artist_id date label

####接下来的任务安排

*@xiaojaing继续做用户画像的特征提取 + 样本标注工作

*@jiaying 继续完成艺人画像的特征提取 + 样本标注工作

*@jiawei 继续完成用户x艺人的画像工作 +样本标注工作

####待解决的问题 用户口味的标识,模型做成一个全局的还是一个近期模型

2016.05.21

language的值表示问题

目前有一feature表示用户最喜好的language,值为language的label序号,为了将序号变成有意义的值,决定对序号使用one-hot编码(100维)

艺人播放值的归一化表示

为了把绝对值形式的艺人播放数转为0~1之间的float,拟采用某种归一化方法,具体为:

  1. 求得所有艺人的播放数均值mean_all_plays,标准差std_all_plays
  2. 该艺人的播放数artist_plays
  3. 归一化值=artist_plays/(mean_all_plays+2*std_all_plays)
  4. 试试latex语法: $artist_play_value=\frac{artist_plays}{mean_all_plays+2 * std_all_plays}$

艺人近期热门度的表示

将绝对值(近期播放数)转为0~1之间的float,具体步骤:

  1. 求得近期所有艺人的播放数all_artist_plays
  2. 该艺人近期的播放数artist_plays
  3. 直接求artist_pop_rate= artist_plays/all_artist_plays
  4. 补充:后期可以考虑加权算法,不仅仅是相对的比值表示热门,还要考虑大于某个阈值才算热门的情况

特征选择

RF/GBRT 的输入特征

艺人画像部分

指标名称 col_name 详细 典型值
性别 gender 表征艺人风格
最擅长的歌曲语言 favor_language 艺人发行所有歌曲中占比最高的语言种类,表征艺人风格
是否演唱多语种 is_multi_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 用户对乐队的喜爱程度

用户X艺人部分

指标名称 详细 典型值

LR 的输入特征

  • dummy code
  • conjunction dummy code

统计结果

用于记录处理过程中的一些有用结果

  1. 表记录时间范围: 20150301-20150830, 共183天
  2. user_actions表的行为总数:5650000+(10000区间)
  3. user_actions涉及的用户总数:349946
  4. user_actions涉及的歌曲总数:10278
  5. songs涉及的艺人总数: 50
  6. 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

用户x艺人x日期 维度

一级指标

指定某个日期dateU用户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,似乎效果减弱了
@waterzxj
Copy link

waterzxj commented Jun 1, 2016

近期特征 :最后5列 + U在前(1,3,7)天内播放A歌曲的天数的比列作为模型的近期输入特征。

特征合并:先从样本和近期文件里筛选出金两周的数据,然后再join画像(全局)特征。

模型输入:rf的输入不用独热编码。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment