我需要对多变量时间序列数据进行建模,以预测一个很少为1的二进制目标(不平衡数据(。 这意味着我们要基于一个特征进行建模是二进制(爆发(,很少是 1? 所有功能都是二进制的,很少是 1。 建议的解决方案是什么?
此功能对基于以下成本函数的成本函数产生影响。我们想知道是否准备好了,如果费用与下面相同。
问题定义:基于爆发的模型,很少是 1.
准备或不准备避免疾病爆发和爆发成本是准备的20倍
每天(次日(的费用: 成本=20*爆发*!准备+准备
模式:准备(准备第二天(爆发哪几天?
问题:
构建模型来预测疫情?
报告每年的成本估算
CSV 文件已上传,数据用于一天结束 csv文件包含每行是一天的行,其中一些是二进制的,最后一个特征是爆发,很少是1,并且主要特征考虑在成本中。
你描述的是类不平衡。
典型的方法是生成平衡的训练数据 通过反复运行包含以下内容的示例 您的(罕见(阳性课程, 并且每次选择一个新的随机样本 从负类。
另外,请注意您的成本函数。 你不会想奖励一个简单的模型 因为总是选择多数阶级。
我的建议:
监督方法
- 用于上采样的
SMOTE
- 通过调整
scale_pos_weight
Xgboost
- 复制少数类,例如:10次
- 尝试使用集成树算法,尝试生成线性表面对您的情况是有风险的。
- 由于您的数据是时间序列,因此您可以在实际疾病发生之前生成具有少数民族类别的天数。例如,您在 2010-07-20 有少数民族班。在此之前的最后观测结果是2010-06-27。您可以通过稍微改变方差来生成观测值,例如 2010-07-15、2010-07-18 等。
无监督方法
- 尝试异常情况检测算法。比如
IsolationForest
(也试试它的扩展版本(。 - 聚类您的观察检查少数类本身是否成为聚类。如果成功,您可以使用集群名称(集群 1、集群 2、集群 3 等(标记数据,然后训练决策树以查看拆分模式。(
Kmeans
+DecisionTreeClassifier
(
模型评估
设置成本矩阵。不要直接使用混淆矩阵精度等。您可以在此处找到有关成本矩阵的更多信息:http://mlwiki.org/index.php/Cost_Matrix
注意:
根据OP在评论中的问题,按年份可以这样做:
df["date"] = pd.to_datetime(df["date"])
df.groupby(df["date"].dt.year).mean()
您也可以使用其他聚合器(平均值、总和、计数等(