0

我需要对多变量时间序列数据进行建模,以预测很少为 1 的二进制目标(不平衡数据)。这意味着我们要建模基于一个特征是二元(爆发),很少是1?所有功能都是二进制的,很少 1. 建议的解决方案是什么?

该特征对基于以下成本函数的成本函数有影响。如果成本与以下相同,我们想知道是否准备好。

问题定义: 基于爆发的模型,很少出现 1。

准备或不准备避免疾病的爆发,爆发的成本是准备的20倍

每天的成本(第二天):成本=20*爆发*!准备+准备

型号:准备(准备第二天)为哪几天爆发?

问题:

  • 建立一个模型来预测疫情?

  • 报告每年的成本估算

csv 文件已上传,数据用于当天结束 csv 文件包含行,每行是一天,具有不同的特征,其中一些是二进制的,最后一个特征是爆发,很少是 1,是考虑成本的主要特征。

4

2 回答 2

1

您正在描述阶级不平衡。

典型的方法是通过重复运行包含您的(罕见的)正类的示例来生成平衡的训练数据,并且每次从负类中选择一个新的随机样本。

另外,请注意您的成本函数。你不会想要奖励一个总是选择多数类的简单模型。

于 2019-08-21T01:08:10.073 回答
1

我的建议:

监督方法

  • SMOTE用于上采样
  • Xgboost通过调音scale_pos_weight
  • 复制少数类 eg:10 次
  • 尝试使用集成树算法,尝试生成线性表面对您的情况来说是有风险的。
  • 由于您的数据是时间序列,因此您可以在真正的疾病发生之前生成少数类的天数。例如,您在 2010-07-20 有少数族裔班级。在此之前的最后一次观察是 2010-06-27。您可以通过稍微改变方差来生成观察结果,如 2010-07-15、2010-07-18 等。

无监督方法

  • 尝试异常检测算法。例如IsolationForest(也可以尝试它的扩展版本)。
  • 集群你的观察检查少数类本身是否成为一个集群。如果成功,您可以使用集群名称(cluster1、cluster2、cluster3 等)标记数据,然后训练决策树以查看拆分模式。( Kmeans+ DecisionTreeClassifier)

模型评估

建立成本矩阵。不要直接使用混淆矩阵精度等。您可以在此处找到有关成本矩阵的更多信息:http: //mlwiki.org/index.php/Cost_Matrix

笔记:

根据 OP 在评论中的问题 groupby year 可以这样完成:

df["date"] = pd.to_datetime(df["date"])
df.groupby(df["date"].dt.year).mean()

您也可以使用其他聚合器(平均值、总和、计数等)

于 2019-10-02T08:00:19.220 回答