在设计算法的下一步时,我需要帮助。
由于NDA的原因,我无法透露太多,但我会尽量做到通俗易懂。
基本上,在算法中经过几个步骤之后,我得到了:
对于我拥有的每个客户及其一个月内发生的事件,在第一步中,我将事件分为几类(每位客户将事件分为从1到x等于1到25之间的x的类别,通常,第一类别的事件密度高于其他类别。
我为每个类别和客户创建了一个时间序列,汇总每小时每小时的事件(获取完成这些事件的时间的模式)。我还使用了一些归一化变量,这些变量基于一个人在一个月(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是x从1到25的任意数字)分成3个标签:标签A,标签B和无。查看这些变量,我可以手动识别它们属于哪个标签,其想法是尽可能多地手动识别,并使用任何分类器算法从中学习并识别所有标签。
我的想法是在表上使用多个逻辑回归,但是时间序列的所有变量都是相关的(因为它们是彼此线性组合),所以我认为我最好只在使用欧几里得的时间序列上使用聚类算法距离以对不同模式进行分类,并在逻辑回归中使用结果和其他两个归一化变量。
我还担心的另一种问题是,这种方法使每一行都独立于其他行,并且从理论上讲,对于每个客户,只能有0或1个标签A,0或1个标签B,其余应为None(另一个提示是,标签A和B通常在第一类之间,因为标签高度依赖于归一化功能(如果合计天数很高,则该行很有可能是A或B,具体取决于时间序列模式) 。
编辑:这不再是一个问题,我将仅执行两种不同的逻辑回归,一种用于标签A或其他,另一种用于标签B或另一种,其结果概率我只能选择其中的最佳者。
数据集非常庞大,需要使用SQL(在Teradata上)应用最终算法,但是为了获得逻辑回归系数或聚类中心,我得到了一个样本并使用R。