所遇到情况描述:
目前,有些地方环境污染情况较为严重,地方相关单位会对问题进行排查,针对这些反馈的排查情况,来预测未来哪些区域可能会存在问题,然后将这类有问题的区域提前推给相应的主管单位。
说说我们team在之前碰到此类问题,所采取的解决方式基本都是粗放型,主观性很强。通过分析局部区域污染物浓度(过去几天的数据),定个标准值来判断哪些区域是否有问题,但这种指标的筛选显得太过随意,采用的大多也是一些经验公式。基于此,想着是否能够采用机器学习的办法来找到一种更合理,推荐更准确的办法。这样,针对这种根据业务分析选择算法的简单应用场景开启了。
如果有大量的数据,咱们能进行各种模型的试验就行了,问题在于数据较少,不过千条,好在后续数据会增加,基于这样的一种情况,选定了一种先简单后复杂的尝试方式。未来会伴随着数据量增加,且业务的时效性强,这时我们考虑的是采用逻辑回归二分类算法来解决。在开始满怀信心筹划这件事时,第一个拦路虎出现了,那就是非结构化的数据清洗,这个非常费时间与精力,相信大家如果处理过此类问题应该深有体会。当数据清洗整理完后,还需要对特征数据进行处理,也就是特征工程,这个需要对业务有相当的了解。在处理完数据,可以上模型了吧?还不行,选择什么样的模型,什么样的参数呀?所以还得有个model_selection,在业务中由于是分类问题,所以我选了svc、决策树、随机森林、ada以及xgb等复合模型。在各种初始调优后终于可以开始进入模型训练了,等等,有些特征可能会用不着从而造成模型的泛化能力较差,基于此,可以选择较为重要的一些特征(按照特种重要性进行排序)。到这一步,可以开始进行模型训练了(下图为随机森林模型跑的结果),粗看准确率在90%左右还行。
如果进行到这一步,以为结束了就太天真了。什么?预测结果,预测结果的准确性是衡量一切的标准。这样拿着刚才的模型去预测可能污染区域,结果出来也是一惊,准确率才60.3%。是哪里弄错了吗?我想这里面还是有很多地方值得推敲的。其一,在验证预测模型准确率时采用的是检查单位反馈上来的数据,这样的数据由于一些利益关系会有一些主观成分在里面;其二,模型是否可以再优化,毕竟数据不到千条,可以再后续数据丰富的基础上进行模型的优化;其三,一些特征工程的处理,譬如增加特征维度,选取更重要的特征值等等。初次尝试还有很多不尽之处,在后面的工作中,我们希望将预测准确率提高至70%以上,不知是否行得通?