如何确定一部分 Stack Exchange 用户是否根据获得的徽章增加/减少他们的发布率?

机器算法验证 聚类 数据挖掘 快速矿工
2022-03-15 18:24:23

我正在尝试挖掘 Stack Exchange 数据转储,以了解是否有一组用户可能受到他们获得的徽章数量的正面或负面影响。我正在研究的理论是,对于一些受徽章激励的人来说,他们最终会失去吸引力并停止发帖。

目前,我已将原始数据过滤为一组:

  • 用户身份
  • 年月
  • 该月发布的帖子
  • 用户在当月获得的徽章总数

我不确定如何继续找到这些用户。我什至不确定如何将这个问题表述为我可以采取行动的问题。如果我在脑海中想象它,我的想法是看到一张图表,其中包含获得的徽章的 x 轴、每月发布的帖子的 y 轴,然后在获得一定数量的徽章后看到线条下降。但这仅适用于每个用户级别。我想找到该图表所在的用户群。

有任何想法吗?

谢谢!

1个回答

为了充分理解我的答案和我将提供的参考资料,我将首先(非正式地)介绍一些与生物学相关的概念——我将参考的大多数技术都用于计算生物学,因此您将参考大部分参考资料find 将假定您基本熟悉这些术语。

基因是来自活生物体的单位,可以在需要时“表达”——也就是说,基因将执行与其相关的动作(通常通过编码它所代表的将执行所需动作的蛋白质)。例如,细胞可以从调节其新陈代谢的基因中构建可变数量的蛋白质。

生物学家通常对通过时间或进化跟踪这些基因和/或它们的表达感兴趣。

在您的情况下,您有兴趣了解用户的个人行为(类似于基因)如何随着时间的推移通过活动来表达。一个用户(类似于有机体)有几个他可以执行的不同动作,我们假设用户的类型和他的当前情况与他将执行的动作有某种形式的相关性。

我会考虑查看两种或三种不同的可用技术——双聚类(有时是行和列聚类,参见链接中的图 1),也许还有某种进化树(取自本文)或隐马尔可夫模型。


在双聚类的情况下,想法如下,将用户放在一个轴上,将动作放在矩阵的另一个轴上。此矩阵中的值将表示所述用户对相关类型所做的操作的数量。重新排序用户和操作,将相似的项目彼此靠近12进行分组,然后使用某种形式的聚类自动对用户进行分组(可以在此处找到一些算法)。

双聚类的结果是您可以将用户分组为子组并根据操作识别他们的特征。请注意,在这种情况下,您将只有用户及其操作的“快照”——为了更好地了解用户操作演变的趋势,您可能需要针对不同的场景执行多个双聚类。也许您可以为使用 Stack Exchange 花费特定时间(例如 1 个月、3 个月、6 个月、1 年)的用户或经历过特定事件(例如昨天刚刚获得徽章)的用户创建双集群。这将使您能够更好地分析趋势 - 尽管应该正确解释确切的统计数据和解释。

正如@AndyW 在他的链接中指出的那样,如何改进我对声誉对投票的影响的分析?数据可能会产生几个问题。虚假陈述、缺失数据、不准确数据和少量数据只是您可能会遇到的一些问题。 Baldi 和 Brunak解释了在生物数据库中发现的数据中通常遇到的一些问题。特别注意,您的数据中可能存在重要的冗余,您可能需要以某种方式对其进行规范化(例如,不同堆栈交换论坛中的同一用户)。


我可能建议的替代技术是基于进化树和/或马尔可夫模型 (HMM) - 我对这些技术的讨论进行了分组,因为您可能会以类似的方式使用它们。在这种情况下,我们可能会想象一个起点,所有用户都从该起点开始,并且由于不同的现象,用户“进化”或“改变状态”。在每次状态更改后,他们可能会执行不同数量和/或比例的操作。

这里的主要问题是创建理想的分类法或 HMM 拓扑。如果(可能通过如上所述的双聚类)我们识别出四种不同类型的用户,则用户将首先被分配到其中一种状态,而在每种状态下,他将执行不同数量和比例的操作。从这一点开始,我将专注于 HMM 的使用,因为进化树并非旨在模拟循环或从一个群体到另一个群体的转移——这可能会使它们更适合。

在这种情况下要做的工作是从数据中训练 HMM 并确定用户从一种状态移动到另一种状态的可能性有多大——特别是从一种状态到用户不再处于活动状态的非活动用户端状态。这将允许您创建用户行为模型。

现在,一旦你训练了这个 HMM,你需要做的就是获取用户操作列表并通过最可能的路径跟踪这个用户——而在特定状态下,用户将被认为是“那种类型的”。

高温高压