4

我正在尝试在确切的时间点重新创建客户的状态。例如,每个客户都有许多可以随时更改的属性(例如,风险评分、最新账单、客户满意度)。

每次客户提交信用申请时,我都希望在提交时查看所有这些特征的价值。随后,我想使用这些值来开发预测模型。

我的第一个想法是创建一个具有有效和到期日期/时间戳的 Type-2 缓慢变化维度,并使用半开连接 time_effective <= date_of_application < time_expired。

然而,这些属性中的大多数都是行为维度,需要使用事实表中的历史数据进行复杂的计算。此外,计算值也不能使用范围(0-500 美元、500-750 美元等)进行分组。跟踪每个维度的所有这些属性会导致它爆炸。注意:有些值每天都在变化,有些值在任意时间点变化。

我理想的数据提取如下:

  • 信用申请ID#
  • 提交时间
  • 提交时属性 1 的值
  • 属性 2 的值...
  • 属性 N 的值

除了信用申请之外,还有其他事实表,我想在其中找到在该事件发生时有效的特征。

处理此问题的建议是什么?我看到了几种方法:

  1. 允许维度爆炸
  2. 创建具有一个或多个属性的单独表,并分别查询具有我感兴趣的属性的特定表
  3. 在信用申请事实表中附加一列,其中包含我感兴趣的所有属性的“快照”。

Kimball 的 ETL Toolkit book (pp 190-192) 和他的 Data Warehouse Toolkit book (187-191) 中讨论了其中一些问题。在第 154-157 页,有一个关于“快速变化的怪物维度”的讨论,这似乎非常相关。不过,我在执行这些建议时遇到了麻烦。

4

1 回答 1

2

我将创建单独的应用程序事实表,其中包含相关表和相关记录的键。假设您有以下维度和事实表:

  • (D) 申请
  • (D) 申请人(或客户)
  • (四)产品
  • (D) 时间
  • (D)monthly_scoring_fact(每月行为评分)
  • (F)monthly_satisfaction_fact(每月满意度调查)
  • (F) 满意度评估事实(ad hoc满意度评估)

然后您可以创建以下事实表Application Fact:

  • application_key - 指向应用维度
  • 申请人键 - 指向申请人维度
  • product_key - 指向产品维度
  • time_key - 指向时间维度
  • monthly_scoring_fact_key - 指向每月评分的最后结果
  • monthly_satisfaction_fact_key - 指向最后的满意度数据
  • 满意度评估事实密钥 - 指向最后的临时评估数据

使用这种方法,您可以获得时间一致的数据并将应用程序维度保持在 SCD0(仅更正)。

于 2013-04-16T11:54:36.110 回答