芒果用户未来价值预估 baseline学习

news/2024/7/3 1:57:13

背景

我们从三个层面定义用户未来价值。

  1. 用户N日留存分
  2. 用户N日观看视频次数
  3. 用户N日观看视频的总时长

以七日作为未来时间窗口:

1.一个用户的7日留存分等于3,代表这个用户未来的7天里,有3天会访问芒果TV。
2.一个用户未来7天观看了20次视频,代表这个用户7日观看视频次数为20。
3.一个用户未来7天一共观看了1000秒,代表这个用户7日观看视频时长为1000。

数据

数量量比较大

用户观看行为序列数据

  • did 用户设备id
  • vid 视频id
  • vts 用户观看vid的播放时长
  • timestamp 用户观看vid的时间戳

视频信息表

  • vid 视频id
  • cid 合集id
  • Is_intact 视频类型
  • online_time 上线时间
  • serialno 集号
  • series_id 系列id
  • duration 视频时长
  • stars 明星
  • tags 标签
  • img_url 视频封面图片地址
  • classify_id 频道id

预测目标

  • active_days

  • watch_nums

  • watch_durations

评价指标

R^2

Baseline

https://github.com/MgtvAi/4nd_mgtv_ijcai/blob/main/mgtv_ijcai_baseline.ipynb

  • 针对每一个目标分别建立一个LGB模型

utils

def sliding_window (df, end_date, day=7) :
    #end_date = df['timestamp'].max()
    start_date = end_date - datetime.timedelta(day)
    
    return df[(df['date'] <= end_date) & (df['date'] > start_date)].reset_index(drop=True)

def date_2_timestamp (date_time) :
    # 字符类型的时间
    # 转为时间数组
    timeArray = time.strptime(date_time, "%Y%m%d%H%M%S")    
    # 转为时间戳
    timeStamp = long(time.mktime(timeArray))
    return timeStamp  # 1381419600

def timestamp_to_date (timestamp) :
    # 获得当前时间时间戳
    #转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
    timeArray = time.localtime(int(timestamp))
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    #return pd.to_datetime(otherStyleTime)
    return otherStyleTime

标签

def get_label (df_behaviors, end_date, day=7) :
    user_behaviors_label_windows = sliding_window (df_behaviors, 
                                                   end_date, 
                                                   day=7)
    user_history_hebaviors = sliding_window (df_behaviors, 
                                             end_date - datetime.timedelta(day), 
                                             day=df_behaviors['date_day'].nunique())

    agg = {
        'date_day' : 'nunique',
        'vid' : 'count',
        'vts' : 'sum',
    }

    df_label = user_behaviors_label_windows.groupby(['did']).agg(agg)
    df_label.columns = pd.Index([e[0] + e[1].upper() for e in df_label.columns.tolist()])
    df_label = df_label.reset_index()  
    df_label.columns = ['did', 'active_days', 'watch_nums', 'watch_durations']    
    return df_label, user_history_hebaviors, user_behaviors_label_windows

特征

过去一段时间的活跃天数,观看视频数量,观看时长的统计特征

def make_feats (df, days) :
    end_date = df['date'].max()
    df_temp = sliding_window(df, end_date, days)
    
    agg = {
        'date_day' : 'nunique',
        'vid' : 'count',
        'vts' : ['mean', 'std', 'min', 'max', 'sum'],
    }

    df_feats = df_temp.groupby(['did']).agg(agg)
    df_feats.columns = pd.Index([e[0] + '_last_' + str(days) + "_" + e[1].upper() for e in df_feats.columns.tolist()])
    df_feats = df_feats.reset_index()    
    return df_feats


def create_sample (user_history_behaviors, df_label) :
    #训练集特征窗口
    #最近一天
    df_feats_1 = make_feats (user_history_behaviors, days=1)
    #最近三天
    df_feats_2 = make_feats (user_history_behaviors, days=3)
    #最近七天
    df_feats_3 = make_feats (user_history_behaviors, days=7)
    #最近21天
    df_feats_4 = make_feats (user_history_behaviors, days=7 * 3)

    df_label = df_label.merge(df_feats_1, on='did', how='left')
    df_label = df_label.merge(df_feats_2, on='did', how='left')
    df_label = df_label.merge(df_feats_3, on='did', how='left')
    df_label = df_label.merge(df_feats_4, on='did', how='left') 
    
    return df_label    

其他可能的点

  • 目标是预测did在未来7天行为

http://lihuaxi.xjx100.cn/news/1115768.html

相关文章

鉴权C# HmacSHA256加密与java HmacSHA256一致

public static string HmacSHA256Encrypt(string secret, string signKey) {   string signRet string.Empty;   using (HMACSHA256 mac new HMACSHA256(Encoding.UTF8.GetBytes(secret)))   {     mac.Initialize();     byte[] hash mac.ComputeHash(Encodi…

OpenPCDet系列 | 3.OpenPCDet点云检测框架训练准备流程

文章目录 训练准备流程1. dataloader部分2. network部分3. optimizer部分4. scheduler部分训练准备流程 对于OpenPCDet中模型的训练过程如下所示,在训练前一般需要进行4个部分的准备:数据准备、网络模型准备、以及优化器和学习率调度器。下面对这4个大部分分别介绍。主要就是…

程序设计入门——C语言 2023年5月9日

程序设计入门——C语言 一、基础理解1、什么是计算机&#xff1f;如何用计算机做事情&#xff1f;什么是应用软件&#xff1f;编程语言干啥的&#xff1f;计算机与人脑&#xff1f;学习编程能干啥&#xff1f;2、计算机-程序-算法3、解释语言vs编译语言 课程来源&#xff1a;链…

SpringBoot——入门程序的简单介绍

简单介绍&#xff1a; 在之前我们创建了一个基础的SpringBoot的程序&#xff0c;可以看到&#xff0c;我们只是启动了一个Java程序&#xff0c;但是它启动了一个Tomcat的服务器。其实在这里面他还启动了很多的服务&#xff0c;只不过这些服务我们都没有用到&#xff0c;我们就…

UNIAPP实战项目笔记63 当前用户查询收货地址的前后端实现

UNIAPP实战项目笔记63 当前用户查询收货地址的前后端实现 总体思路 当前登陆的时候收货地址( token ) header:{ token:true } 前端: 后端: 1.设计数据库(新建一个收货地址表) 收货地址表,需要和user表关联 [字段:用户id] 2.创建一个接口 查询收货地址接口文档 1.1 接口功能 …

【STL】模拟实现vector(详解)

文章目录 前言vector的模拟实现一&#xff0c;搭建框架二&#xff0c;实现构造函数三&#xff0c;构造的其他方式传统写法1.拷贝构造2. 重载赋值操作符3. 使用迭代器构造4. 初始化为N个val的vector 现代写法1. 拷贝构造2. 赋值重载 四&#xff0c;实现vector相关函数1. reserve…

UDP 协议详解

UDP (User Datagram Protocol) 是在 OSI 七层模型中的传输层上的一种协议。它和 TCP 类似是用来传输数据的&#xff0c;但是 UDP 更加简单、高效、灵活&#xff0c;适用于对数据传输速度要求较高&#xff0c;但对可靠性要求不高的场景&#xff0c;例如游戏、音频、视频等实时通…

常用的python gpu加速方法

在使用 PyCharm进行机器学习的时候&#xff0c;我们常常需要自己创建一些函数&#xff0c;这个过程中可能会浪费一些时间&#xff0c;在这里&#xff0c;我们为大家整理了一些常用的 Python加速方法&#xff0c;希望能给大家带来帮助。 在 Python中&#xff0c;我们经常需要创建…