如何找到长度未知的重复模式并在字符串中开始

数据挖掘 分类 时间序列
2022-02-18 15:50:50

背景:

我正在尝试对我们的客户围绕识别债务拖欠的早期标志进行一些分析。我们每周向客户收费,不同账户的付款方式会有所不同。好的客户通常会按 4-4-5 模式每周、每两周、每周 4 次或每月支付一次。其他客户的付款方式将不稳定。

即使付款方式一致,他们也可能多付或未全额支付余额,因此可能存在潜在的债务上升或下降。

到目前为止的工作:

为此,我创建了两个字符串来表示:

  1. 每周余额是否减少 (v)、增加 (^) 或未移动 (-)(如果余额减少或不变则推断已付款)和...
  2. 基于每周费用的账户负债水平(- 用于贷记,. 用于结清余额,0-9 用于余额少于 10 周,X 用于余额超过 10 周)

所以我现在有一些看起来像这样的字符串(好帐户)

^v^v^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^^    231212-012-012-012-012-0120112-012-0-0120012-012-012-0120112-012-012-012-012-0123
^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^v^^^^    12-012-012-012-012-012-012-012-012-0-012-012-012-012-012-012-012-012-012-012-0123

对于不良/不稳定的帐户,就像这样

^v^^^vv^^v^^^v^^^v^v^v^^^v^^^v^^^v^v^^vv^^^v^^vv^^vv^^vv^^vv^^vv^^vv^^vv^^vv^^v^    341234112312231234233412341234123423123312341233123301220122-011-011-011--00--001
v^v^v^^v^vv^vv^vv^v^^^^v^^^v^^^^v^v^^^v^^^v^^^^v^^^v^^^^v^^^v^^^v^^^^v^^^v^^^v^ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9XXX9XXXX9XXX9XXXX9XXX89XX89XXX89XX789X78

下一步:

我现在要做的是识别具有特定付款模式的帐户:

  • 每两周一次 = ^v^v
  • 4周 = ^^^v^^^v^^^v
  • 每月 = ^^^v^^^v^^^^v (注 4-4-5)

我还想确定这些模式在哪里发生了变化。请记住,在每周或每月 4 次的模式中,我们可能不是模式的开始,我还需要尝试找到每个模式的“种子”周

如果我看到一个模式至少重复 3 次,我会认为它是一致的,因此每两周一次的模式为 12 周,第 4 周为 36 周,每月为 36 周[每月可能是 445、454 或 544,但必须重复]所以我想标记那些已经变得不稳定或改变了模式的一致账户。我的数据可以追溯到 5 年前。

我有 Microsoft SQL 中的数据,目前我必须使用的唯一分析工具是 Microsoft SQL 和 Excel。我不是在寻找代码,而是在我分析数据的策略中应该采取的下一个实际步骤。

我正在考虑找到模式中的第一个向下步骤并删除这个和前面的向上刻度(以及乘数中的相关字符)然后通过一些 REPLACE() 函数运行剩余的字符串,但这感觉不是很“聪明” '

有没有更好的策略可以采用,因为感觉就像我在 MUNGing 数据?

1个回答

根据您的描述,听起来自相关可能是识别频率的一个很好的初始步骤。自相关基本上是序列自身在 0、1、2、3 等处移动的乘积。如果客户倾向于按月付款,您将在 4 左右看到第一个正增长,因为这是每次付款与之后的付款一致的地方。请注意,无论序列的开始如何,这都会起作用,甚至可以抵抗一些噪音。甚至Excel 似乎也有自相关函数

当然,您可以通过其他步骤进一步完善它,和/或在不同的窗口上尝试这个(以防模式随时间变化)。