如何从大型数据库中分类出一个小而奇特的子集?
Posted
技术标签:
【中文标题】如何从大型数据库中分类出一个小而奇特的子集?【英文标题】:How to classify a small and peculiar subset out of a large database? 【发布时间】:2013-05-29 00:39:45 【问题描述】:我必须对包含保险单信息的数据库执行数据挖掘任务。每个元组表示有关单个策略的数据,以及有关发布它的机构、它所指的客户和其他字段的信息。它就像假设表策略、客户和代理之间的产品。字段如下:
保单类型、ID号、保单状态、产品描述、产品组合、签发日期、生效日期、到期日、保单期限、贷款期限、取消日期、取消原因、总保费、分流器保费、ID合作伙伴、ID代理,国家代理,ID 区,代理潜力,性承包商,出生年份承包商,工作承包商,性别被保险人,工作被保险人,出生年份被保险人,产品区域,法律表格,ID 声明,年份声明,状态声明,供应声明,付款声明
这是一项学术任务,我们的教授希望我们确定客户流失率、交叉销售和追加销售。我不太熟悉该领域,因此我在***上查找了这些术语。我从流失率开始,在我看来,在这种情况下,我必须描述政策状态设置为“已取消”且取消原因为“客户取消”的客户的属性。
使用 Rapid Miner,我尝试应用决策树和规则挖掘,但感兴趣的子集非常小,以至于输出模型尽管总体上具有良好的准确度,但在预测取消政策方面的准确度非常非常差。发生这种情况是因为取消政策的子集非常小。我还尝试将 MetaCost 运算符应用于给定的成本矩阵,其中错误分类已取消策略的成本相对于其他策略高得离谱(比如高出一百万倍),但这根本没有改变结果。
我现在最好的选择是使用顺序覆盖算法进行规则挖掘,但是 Rapid Miner 没有实现它,我必须手动编码。
对于如何为一小部分已取消的保单建立一个好的模型,以便我们可以使用它来识别将来可能取消其保单的客户,您有什么建议吗?
注意:由于它来自真实来源,尽管是匿名的,我不能透露数据库或其中包含的任何数据。
【问题讨论】:
【参考方案1】:您尝试过纳维贝叶斯吗?它适用于少量数据。您也可以尝试它的变体,例如 AODE。 AODE 在 Rapid Miner 中不可用。您应该安装 Weka 扩展来访问 Rapid Miner 中的 AODE。
【讨论】:
是的,我也试过 Navie Bayes。我从整个数据集开始生成模型,然后测量该模型对我感兴趣的子集的分类效果如何,准确率低于 5%。 今天下午我又试了一次,经过一番预处理,我得到了一个出奇的好模型(99.95% 的准确率,在分层样本上训练)。【参考方案2】:您需要平衡您的数据集,以便类(已取消/未取消)的大小相同。这意味着(暂时)丢弃大量数据。
您可以使用带有 Balance Labels 复选框的 Sample 运算符来执行此操作。
【讨论】:
是的,我知道,这就是为什么您需要在取消和未取消之间平衡您的样品。您还可以使用属性加权来查看哪些属性是取消和非取消之间的重要区别。以上是关于如何从大型数据库中分类出一个小而奇特的子集?的主要内容,如果未能解决你的问题,请参考以下文章
如何避免循环遍历 pandas 中的分类变量以查看/操作数据帧切片/子集
如何在 PySpark 中的大型 Spark 数据框中对行的每个子集进行映射操作