我需要关于我正在设计的算法的下一步应该是什么的帮助。
由于保密协议,我不能透露太多,但我会尽量笼统和理解。
基本上,在算法中的几个步骤之后,我有这个:
对于我拥有的每个客户以及他们在一个月内所做的事件,在第一步中,我将事件分为几个类别(每个客户将事件分为从 1 到 x 的类别,其中 x 介于 1 到 25 之间,通常第一个类别比其他类别具有更多的事件密度)。
对于每个类别和客户,我创建了一个时间序列,以每小时聚合每月的事件(获取这些事件何时完成的模式)。此外,我使用了几个标准化变量,这些变量基于一个月(30 天)内该人执行至少一个事件的天数,以及至少一个事件的天数与至少一个事件的总天数事件(聚合所有集群)。第一个给我一个客户在当月活跃程度的比率,第二个给我一个类别与其他类别的权重。
决赛桌长这样
|*Identifier*| *firstCat* | *feature1* | *feature2* | { *(TIME SERIES)* }
CustomerID | ClusterID | DaysOver30 | DaysOverTotal | Events9AM Events10AM ...
xx | 1 | 0,69 | 0,72 | 0,2 0,13 ...
xx | 2 | 0,11 | 0,28 | 0,1 0,45 ...
xy | 1 | 0,23 | 0,88 | 0,00 0,60 ...
xy | 2 | 0,11 | 0,08 | 1,00 0,00 ...
xy | 3 | 0,10 | 0,04 | 0,40 0,60 ...
时间序列变量是每个特定类别每天事件总数的百分比(这意味着每行加起来所有变量应该是 1)。这样做的原因是,例如,具有事件的时间序列0 0 0 1 0
完全1 1 1 2 1
不同,标准化为正常会产生相似的结果。由于不同类别之间的高度偏差,我与其他类别独立检查时间序列上的值。
我现在需要做的是将这些类别(请记住,它们可以是从 1 到 x 是从 1 到 25 的任何数字)识别为 3 个标签:标签 A、标签 B 和无。查看这些变量,我可以手动识别它们属于哪个标签,其想法是尽可能手动识别,并使用任何分类器算法从中学习并识别所有标签。
我的想法是在表上使用多个逻辑回归,但时间序列的所有变量都是相关的(因为它们是彼此的线性组合),所以我认为我最好只在使用欧几里得的时间序列上使用聚类算法距离对不同模式进行分类,并在逻辑回归中使用结果和其他两个标准化变量。
我担心的另一个问题是,这种方法将每一行独立于其他行,理论上,对于每个客户,应该只有 0 或 1 个标签 A,0 或 1 个标签 B,其余的应该是 None(另一个提示是通常标记 A 和 B 介于第一类之间,因为高度依赖于标准化特征(如果总天数很高,则该行很可能是 A 或 B,具体取决于时间序列模式) .
编辑:这不再是一个问题,我将只执行两个不同的逻辑回归,一个用于标记 A 或其他,另一个用于标记 B 或另一个,结果概率我只能选择每个中最好的。
数据集非常庞大,需要使用 SQL(在 Teradata 上)应用最终算法,但为了获得逻辑回归的系数或聚类中心,我得到一个样本并使用 R。