预测用户在网站上活跃的概率

数据挖掘 机器学习 Python
2022-03-15 02:20:06

我得到了两个不同的数组,它们根据某些功能描述用户是否在站点上处于活动状态。第一个数组用于训练。数组的每一行是不同的用户,列是不同的特征。前 896 列描述了用户的使用模式,其余 28 列是标签(这 28 列代表 28 个不同的时间段,如果用户在该时间段内处于活动状态,则标记为 1,否则标记为 0。

第二个数组用于测试并且具有相同数量的列,但这里最后 28 行是空的。我的任务是预测用户在每个时间段内活跃的概率。我有点迷茫,正在寻找(最好是非常简单的)方法来解决这个问题。

2个回答

您正在寻找这样的模型:,其中是 28 个不同时间段中的一个或多个,是包含描述用户使用模式的 896 列的全部或部分的特征矩阵。由于是二进制的,因此您的问题是分类。y=βX+uyXy

既然你说你在寻找一种简单的方法,我可以想象一个逻辑回归这是R中的一个最小示例:

# Data
df = data.frame(c(12,32,23,13,45,31), c(657,456,265,263,475,354), c(8,5,9,4,6,3), c(1,1,0,0,1,0), c(0,1,1,0,0,1))
colnames(df) = c("f1", "f2", "f3", "t1", "t2")
df

# Logit
mylogit1 <- glm(t2 ~ t1+f1+f2+f3, data = df, family = "binomial")
summary(mylogit1)

# Predict outcome
preds = predict(mylogit1, newdata = df, type = "response")

# Look at AUC
library(Metrics)
auc(df$t2, preds)

# Look at the confusion matrix
library(caret)
preddf = data.frame(as.factor(round(preds)),as.factor(df$t2))
colnames(preddf)=c("pred", "truth")
confusionMatrix(preddf$pred, preddf$truth)

首先,我生成一些具有三个特征f和两个目标的假数据t看起来像:

  f1  f2 f3 t1 t2
1 12 657  8  1  0
2 32 456  5  1  1
3 23 265  9  0  1
4 13 263  4  0  0
5 45 475  6  1  0
6 31 354  3  0  1

其次,我运行逻辑回归,其中我使用t2作为(这是我预测的)和作为特征(我用来进行预测):yf1,f2,f3X

    Call:
glm(formula = t2 ~ f1 + f2 + f3, family = "binomial", data = df)

Deviance Residuals: 
      1        2        3        4        5        6  
-0.2496   1.3025   0.7380  -1.2315  -1.4095   0.9806  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)  1.443719   4.298364   0.336    0.737
f1           0.071943   0.111565   0.645    0.519
f2          -0.009584   0.012244  -0.783    0.434
f3           0.066979   0.471445   0.142    0.887

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 8.3178  on 5  degrees of freedom
Residual deviance: 6.7684  on 2  degrees of freedom
AIC: 14.768

Number of Fisher Scoring iterations: 5

毫不奇怪,考虑到假数据,回归没有太大意义。

但是,现在我们可以进行预测并测试我们的模型是否运行良好。通常,您会使用未用于模型训练的部分数据来检查模型的性能。为了方便起见,这里我只使用相同的数据。

例如,您可以查看混淆矩阵来检查您做出了多少正确的预测:

Confusion Matrix and Statistics

          Reference
Prediction 0 1
         0 1 1
         1 2 2

好吧,在这种情况下不太好,只有 50% 正确。

因此,您可以使用这样的模型来预测数据中的每个目标(时间段)。

当然有更多的选择如何对此进行建模,例如“提升”,或者您也可以在多目标模型中一次预测所有目标您还可以寻找特征的改进表示,例如在广义加法模型中。或者,您可以使用“套索”来缩小中对预测无用的特征。XX

只要确保您使用逻辑链接函数来预测二进制输出。

我会抛出一些提示/澄清。

  1. 你的“测试”集对你没有用,因为你缺少因变量,所以一开始就忽略它。
  2. 首先,您需要将“训练”数据分成两组,一组用于训练模型,一组用于测试模型并计算模型的有效性。
  3. 希望您在训练集中有很多记录,因为您有很多自变量。一些模型对低样本量和高维度非常敏感。
  4. 您将需要决定是否需要对特征列进行编码。您必须特别注意任何分类特征,因为它们需要进行热编码。
  5. 您将需要选择一个模型或模型集合。您可以从尝试二元分类器开始。您需要为每个时间范围创建一个。每个模型都应该采用约 890 个特征并产生一个 0 或 1 的结果。
  6. 您将需要弄清楚如何评估您的模型,以了解您为调整每个模型所做的选择如何影响结果。

这不是一个完整的列表,但希望对您有所帮助。