Как сделать прогноз интереса пользователей к чтению статьи - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить прогноз интереса пользователей к ежедневным статьям, читаемым для веб-сайта, используя следующие образцы данных:

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'))

Мои данные выглядят так:

enter image description here

Теперь я использую модель 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

Результат прогноза выглядит так:

enter image description here

В настоящее время с моим исходным набором данных я получаю только 20% предсказания были правильными. Дайте мне знать, какие другие способы или модели я должен использовать для повышения скорости прогноза?

Изменить: с многовариантностью LSTM Я могу прогнозировать данные одного пользователя одновременно с 28 % предсказания.

1 Ответ

0 голосов
/ 28 мая 2020

Ну, это действительно очень широкий вопрос, вы занимались EDA? Потому что мой первый вопрос будет в том, каков будет дистрибутив для InterestValue. И, кроме того, каково распределение по ЛЮБОМУ из этих полей данных.

Если процентные значения в основном равны нулю, тогда модель будет соответствовать большему количеству нулей, в этом случае стратификация в вашей выборке очень поможет, это двоичное предсказание или мультикласс?

Кроме того, какие настройки вы сделали на этой модели, похоже, это просто гиперпараметры по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...