几周前我产生了一个非常有意思的想法。通过假设一个例子来解释就是:你正在经营一个电子商务网站,你想优化购买的数量。并且假设,我们希望通过A/B测试或者基本的数据切片分割方法,来尽可能多的从用户本身得到相应经验,预测用户的转化情况,但有一个一直存在的问题就是有太多的不确定性因素。
我们怎样才能加速从用户身上学习经验的过程?特别是,是否有办法以某种方式结合其他数据进行预测?我觉得这是一个非常普遍的问题,所以我写出这个问题并附上一些不错的想法。
简单模型
做了许多理论性学习,我希望可以在实践中尝试一下。我的想法是:通过大量外部数据,建立一个模型,判断是否某用户会购买一个产品。我们使用我们的机器学习模型,而不是使用实际的目标测度(人们购买此商品的比例)。因此,我们向模型中输入多种变量,然后来预测目标(用户是否购买此产品)。
我尝试了几种不同模型,其中最有效的是你能想到的一个非常基础的模型:线性回归。输入的是一些0-1变量,表示用户在浏览网页的过程中,是否点击了某页面,本次模型中一共有70个不同的页面(其中一些比较特殊的页面只有很少的用户点击)。预测得到一个二分类结果,表示用户是否购买该产品。通过计算最小均方误差,得到最终模型。
借助Keras框架,模型只需如下几行代码:
inputs = keras.layers.Input(shape=(X.shape[0],))inputs_dropout = keras.layers.Dropout(0.90)(inputs)outputs = keras.layers.Dense(1, activation='linear')(inputs_dropout)model = keras.models.Model(inputs=inputs, outputs=outputs)model.compile(optimizer=keras.optimizers.SGD(lr=1e-2), loss='mse')model.fit(X, y, batch_size=16, epochs=300)
结果
通过随机选取三个点击我们网站的用户子集,对转化率进行A/B测试。具体过程在这里不进行叙述,我们想知道这三个子集之间的转化率是否不同。
首先来看最一般的方法,我们计算了完成整个点击流,最终购买产品的用户比例。绘制出带有置信区间的转化率图。当我们得到越来越多的数据时,每个群体的置信区间缩小:
接下来,我使用今年早些时候的数据训练模型,因此数据可能会超出我们之前的样本范围。画出同样的图像,但这里用预测值代替真实值。每个预测值都是通过每个用户是否点击这70个页面的数据得到的。我们可以看到,置信区间更紧,转化率曲线更平滑。
得到的这个结果非常好。在这个模型中,我们将置信区间缩小了近50%,这意味着我们计算出相应的统计指标可以提速4倍。如果我们针对更大量数据绘制出转化率和置信区间图像,可以看到用预测值得到的不确定性会持续变小。
结论
这篇文章的结论非常有趣,值得思考。这个模型的一个缺点是方差的变化存在偏差。预测的转化率可能有更严格的置信区间,但它不再保证收敛到“正确”的值。这是可以接受的吗?我不知道。另一个问题是,随着时间的推移,数据分布会发生变化。例如,购买产品的页面转移流变化。
我还没有足够的时间来解决这些问题,也还不确定我是否会将这个模型用到真实场景中。这是一个有点不成熟的想法,希望得到反馈与讨论。
联系客服