快手用户活跃度分析(未完成)

目标

为期30天的用户数据,但是不是所有的用户都有30天的信息数据,比如用户A第7天注册的,则其前6天没有数据。
预测未来用户活跃度的可能性。 预测7天后的,基于第7天,预测第14天,基于第8天,预测第15天用户活跃度的可能性(0/1)
活跃用户定义为:在未来七天使用过APP

数据集分析

一共4份数据集,登陆日志、活跃日志、注册日志、视频创建日志
在这里插入图片描述

各数据集的内容

import pandas as pd
import numpy as np
import tensorflow as tf
import datetime
from deep_tools import f
from deep_tools import DataGenerator
register=pd.read_csv('user_register_log.txt',sep='\t',names=['user_id','register_day','register_type','device_type'])
launch=pd.read_csv('app_launch_log.txt',sep='\t',names=['user_id','launch_day'])
create=pd.read_csv('video_create_log.txt',sep='\t',names=['user_id','create_day'])
activity=pd.read_csv('user_activity_log.txt',sep='\t',names=['user_id','act_day','page','video_id','author_id','act_type'])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

整体模型架构

预测未来7天的活跃度 tn+7
使用RNN(GRU 或者LSTM)
在这里插入图片描述

预测第8天的活跃度,只要有登陆或其他都动作,说明是活跃的。

构建label 序列 标签

基于数据是否有登陆,来进行序列打标

构建用户特征序列

每个用户id的序列长度

在这里插入图片描述

构建字典存储用户在持续时间内,不同日期的数据

取到用户长度,并将相应的用户id 放进去
在这里插入图片描述在这里插入图片描述
每个ID有一个长为30的序列,每个序列有12个特征,没有用0填充。
在这里插入图片描述

class user_seq:
    
    def __init__(self,register_day,seq_length,n_features):
        self.register_day=register_day
        self.seq_length=seq_length
        self.array=np.zeros([self.seq_length,n_features]) #构建矩阵:持续天数*特征个数,后续新创建的特征来往里面填充
        self.array[0,0]=1
        self.page_rank=np.zeros([self.seq_length])
        self.pointer=1
        
    def put_feature(self,feature_number,string):
        for i in string.split(','):
            pos,value=i.split(':') #注册后第几天进行了登录,1为指示符
            self.array[int(pos)-self.register_day,feature_number]=1

    def put_PR(self,string):
        for i in string.split(','):
            pos,value=i.split(':')
            self.page_rank[int(pos)-self.register_day]=value

    def get_array(self):
        return self.array
    
    def get_label(self):
        self.label=np.array([None]*self.seq_length)
        active=self.array[:,:10].sum(axis=1)
        for i in range(self.seq_length-7):
            self.label[i]=1*(np.sum(active[i+1:i+8])>0)
        return self.label

在这里插入图片描述

n_features=12
data={row[0]:user_seq(register_day=row[1],seq_length=row[-1],n_features=n_features) for index,row in register.iterrows()}

Tips

  • batch 内每个的序列长度都必须相同
  • batch 与 batch 之间可以不一样
  • 每个样本, 每个ID用户对应 sep_length*n_features
  • 如果是使用随机森林、xgboost 等方法的话,还可以加入统计特性如 平均值、最值、等信息
  • 本项目构建特征序列矩阵是为了使用RNN 方法
  • 构建时序特征矩阵,然后基于RNN建立模型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪闪发亮的小星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值