我在试着预测一个球迷是否会去看一场体育赛事。我的数据(pandas DataFrame)包括球迷信息(人口统计等),以及他们是否参加了最近10场比赛(g1_attend - g10_attend)。
fan_info age neighborhood g1_attend g2_attend ... g1_neigh_turnout
2717 22 downtown 0 1 .47
2219 67 east side 1 1 .78
我怎么能预测如果他们要参加g11_attend,当g11_attend不存在于数据框架?
最初,我打算研究在scikit-learn中应用一些基本模型进行分类,可能只是在DataFrame中添加一个g11_attend列。出于某种原因,这一切让我很困惑。我现在想,把它当作一个时间序列会更合适,我正在研究其他模型。
你是对的,你不能只是添加一个新的类别(即输出类)到分类器——这需要一些做时间序列的东西。
但是在时间序列上使用分类器有一种相当标准的技术。断言(条件)时间独立性,并使用窗口。
简而言之,我们将假设某人是否参加游戏仅取决于我们捕获的变量,而不是其他时间因素(或其他一般因素)。例如,我们假设我们可以翻译他们在一年中参加的比赛历史,并且它仍然是相同的概率。这显然是错误的,但我们还是这样做了,因为机器学习技术将处理数据中的一些噪声。这显然是错误的,因为有些人会因为太冷等原因而避免在冬天参加比赛。
现在在分类器上:
我们有输入,我们只想要一个输出。基本的想法是,我们要训练一个模型,如果输入他们是否参加了前9场比赛,则预测他们是否会参加第10场比赛
因此输出输入为1age
, neighbourhood
, g1_attend
, g2_attend
,…g9_attend
输出g10_attend
——一个二进制值。
这给我们训练数据。
然后,当需要测试它时,我们移动所有东西:将g1_attend
切换为g2_attend
,将g2_attend
切换为g3_attend
和…g10_attend
为g9_attend
。然后我们的预测输出将是g11_attend
。
你也可以用不同的窗口大小训练几个模型。例如,只看最近两场比赛,预测第三场的出勤率。这给了你更多的训练数据,因为你可以。g1,g2
-> g3
和g2,g3
-> g4
等。
你可以训练一组不同大小的窗口,并用一些集成技术合并结果。
特别是训练g1,...,g8
-> g9
是一个好主意,然后用它来预测g10
(使用g2,...,g9
作为输入)检查是否工作
我建议将来您可以在交叉验证中询问这些问题。虽然这可能是关于堆栈溢出的主题,但它在那里更有主题,并且有更多的统计学家和机器学习专家。
1我建议现在放弃fan_id
作为输入。我只是不认为这对你有任何帮助,但解释为什么是这个问题超出了范围。