如何对文章阅读进行用户兴趣预测

Posted

技术标签:

【中文标题】如何对文章阅读进行用户兴趣预测【英文标题】:How to make user interest prediction for article reading 【发布时间】:2020-09-14 12:19:37 【问题描述】:

我正在尝试通过使用以下示例数据来预测用户对网站阅读的每日文章的兴趣:

from datetime import date, timedelta
import pandas as pd
import numpy as np
sdate = date(2019,1,1)   # start date
edate = date(2019,1,7)   # end date -6days

required_dates = pd.date_range(sdate,edate-timedelta(days=1),freq='d')
# initialize list of lists 
data = [['2019-01-01', 1000,101], ['2019-01-03', 1000,201] ,['2019-01-02', 1500,301], 
        ['2019-01-02', 1400,101],['2019-01-04', 1500,201],['2019-01-01', 2000,201],
        ['2019-01-04', 2000,101],['2019-01-04', 1400,301],['2019-01-05', 1400,301],['2019-01-05', 1400,301]]
# Create the pandas DataFrame 
df1 = pd.DataFrame(data, columns = ['OnlyDate', 'ArticleID','UserID'])
df1=df1[['OnlyDate','UserID','ArticleID']]
df1.sort_values(by=['UserID','ArticleID'],inplace=True)
df1.reset_index(inplace=True,drop=True)
# raw data 
raw_data= df1

# Final Data
final_data= (df1.groupby(['OnlyDate','UserID','ArticleID'])
    .size()
    .unstack('OnlyDate', fill_value=0) 
    .unstack('UserID', fill_value=0)
    .unstack()
    .reset_index(name='InterestValue'))

我的数据看起来像:

现在我使用的是 XGB 模型:

import xgboost as xgb
from sklearn.model_selection import KFold, cross_val_score, train_test_split
# converting data for model
final_data['OnlyDate']=pd.to_datetime(final_data['OnlyDate'],format="%Y-%m-%d")
final_data['OnlyDate']= final_data['OnlyDate'].dt.strftime('%Y%m%d')
final_data['OnlyDate']=final_data['OnlyDate'].astype(np.int64)
final_data.info()
# splitting data
X, y = final_data.drop('InterestValue',axis=1), final_data.InterestValue
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
print(X.shape,y.shape,X_train.shape, X_test.shape, y_train.shape, y_test.shape)
xgb_model = xgb.XGBClassifier().fit(X_train, y_train)
print('Accuracy of XGB classifier on training set: :.2f'
       .format(xgb_model.score(X_train, y_train)))
print('Accuracy of XGB classifier on test set: :.2f'
       .format(xgb_model.score(X_test[X_train.columns], y_test)))
#making prediction here 
y_pred = xgb_model.predict(X_test)
#Checking how data looks after prediction
X_test_afterPrediction = X_test.copy()
X_test_afterPrediction['InterestValue']= y_test
X_test_afterPrediction['PredictedValues'] = y_pred
X_test_afterPrediction

预测输出如下:

目前使用我的原始数据集,我得到的预测只有 20% 是正确的。 让我知道我应该使用哪些其他方式或模型来提高我的预测率?

编辑:使用 LSTM 多变量,我能够以 28% 的预测率一次预测单个用户数据。

【问题讨论】:

【参考方案1】:

嗯,这是一个非常广泛的问题,你做过 EDA 吗?因为我的第一个问题是 InterestValue 的分布是什么。除此之外,这些数据字段的分布情况如何。

如果兴趣值大部分为零,那么模型将拟合更多的零,在这种情况下,抽样中的分层将有很大帮助,它是二元预测还是多类预测?

另外,你在这个模型上做了什么样的调整,看起来它只是默认的超参数。

【讨论】:

以上是关于如何对文章阅读进行用户兴趣预测的主要内容,如果未能解决你的问题,请参考以下文章

使用 statsmodels 进行预测

用户体验报告——same

4.2学习周报

通过影响函数来理解黑盒预测---论文阅读报告

第1301期如何阅读大型前端开源项目的源码

如何构建一个生产环境的推荐系统