这次给大家带来的是2020数字中国创新大赛-数字政府赛道-智能算法赛:智慧海洋建设的算法赛复赛赛道B top5的方案以及代码开源。比赛传送门:https://tianchi.aliyun.com/competition/entrance/231768/introduction 这是我们队伍参加的为数不多的数据挖掘类的算法竞赛。经过两个多月的时间,我们队伍最终在算法赛道B阶段取得top5的成绩。说一下参赛体验:都是神仙打架,太难了!接下来进入正题吧!

    本方案采用特征工程 + NLP的相关技术,下面为大家进行详细介绍。

任务介绍

    赛题基于位置数据对海上目标进行智能识别和作业行为分析,要求选手通过分析渔船北斗设备位置数据,得出该船的生产作业行为,具体判断出是拖网作业、围网作业还是流刺网作业。数据包含脱敏后的渔船ID、经纬度坐标、上报时间、速度、航向信息,由于真实场景下海上环境复杂,经常出现信号丢失,设备故障等原因导致的上报坐标错误、上报数据丢失、甚至有些设备疯狂上报等。每一个渔船ID对应多条上报数据。数据示例如图:    分析完整个赛题其实是一个时序多分类的任务。

    评价标准:以3种类别的各自F1值取平均做为评价指标

数据分析&特征分析

    主要从以下4个方面去进行了数据分析和特征的分析

2-1. 基本信息

经纬度/x-y的分布
  • 不同渔船的作业方式的区域有很大的区分度;

  • 区域的重叠部分容易混淆,需要更多的信息进行判断;

速度/speed的分布
  • gill netter(刺网)作业方式大部分都在速度0或接近0的情况下作业;

  • 速度的稳定性 trawler(拖网) > seiner(围网) > gill netter(刺网);

方向/direction的分布
  • 三种作业方式的方向/direction在方向特别小的情况有一定差异;

我们对基础特征进行max,min...等进行统计得到一些基础特征

def group_feature(df, key, target, aggs,flag):   agg_dict = {}for ag in aggs:agg_dict['{}_{}_{}'.format(target,ag,flag)] = agprint(agg_dict)t = df.groupby(key)[target].agg(agg_dict).reset_index()return t
t = group_feature(df, 'ship','x',['max','min','mean','median','std','skew'],flag)
t = group_feature(df, 'ship','speed',['max','mean','median','std','skew'],flag)
t = group_feature(df, 'ship','direction',['max','median','mean','std','skew'],flag)
t = group_feature(df, 'ship','y',['max','min','mean','median','std','skew'],flag)

2-2. 细致信息

speed > 0 & speed == 0  经纬度/x-y 分布

Day&Night 经纬度/x-y 分布
  • 同一种作业方式在不同速度的位置区域(经纬度)也有着一定的差异

  • 同一种作业方式在Day&Night上速度上有着一定的差异

  • 同一种作业方式在Day&Night上位置区域(经纬度)有着一定的差异

data_1 = data[data['speed']==0]
data_2 = data[data['speed']!=0]
data_label = extract_feature(data_1, data_label,"0")
data_label = extract_feature(data_2, data_label,"1")
df['day_nig'] = 0
df.loc[(df['hour'] > 5) & (df['hour'] < 20),'day_nig'] = 1
data_1 = data[data['day_nig'] == 0]
data_2 = data[data['day_nig'] == 1]
data_label = extract_feature(data_1, data_label,"on_night")
data_label = extract_feature(data_2, data_label,"on_day")

2-3. 动态信息

    每个渔船id的速度、经纬度看做是一个序列信息

    利用速度、经纬度的分位数统计量,将浮点特征分桶转成一个类型特征

    使用不同的ngram提取TF-IDF 特征(ngram=1, 2, 3)

    对不同ngram提取的特征t-SNE 降维到二维,进行可视化

    最终,利用NLP的TF-IDF提取关键高维的ngram信息,有效获取速度和经纬度动态变化的信息

#分桶
def cut_bins(raw_data, col_name=None, q=49):features, bins = pd.qcut(raw_data[col_name], q=q, retbins=True, duplicates="drop")labels = list(range(len(bins) - 1))features, bins = pd.qcut(raw_data[col_name], labels=labels, q=q, retbins=True, duplicates="drop")return features, bins, labels

经纬度/x-y ngram=1, ngram=2, ngram=3降维之后结果(从左到右)
# 讲融合后的taglist当作一句话进行文本处理
self.data['title_feature'] = self.data[self.to_list].apply(lambda x: x.split('|'))
self.data['title_feature'] = self.data['title_feature'].apply(lambda line: [w for w in line if w not in stop_words])
self.data['title_feature'] = self.data['title_feature'].apply(lambda x: ' '.join(x))print('start NMF')
# 使用tfidf对元素进行处理
tfidf_vectorizer = TfidfVectorizer(ngram_range=(tf_n,tf_n))
tfidf = tfidf_vectorizer.fit_transform(self.data['title_feature'].values)
#使用nmf算法,提取文本的主题分布
text_nmf = NMF(n_components=self.nmf_n).fit_transform(tfidf)

2-4. 基于word2vec的表征

    使用深度学习的word2vec的CBOW算法无监督训练,获取经纬度(x-y)和速度(speed)的类型向量

    每个渔船id的经纬度和速度向量取平均作为特征,然后使用t-SNE 降维到二维,进行可视化

    最终,利用NLP的word2vec提取区域的交互动态信息,有效获取速度和经纬度信息

word2vec 降维之后可视化(从左到右)·经纬度· ·经纬度+速度·
from gensim.models import Word2Vecimport gcdef emb(df, f1, f2):emb_size = 23print('====================================== {} {} ======================================'.format(f1, f2))tmp = df.groupby(f1, as_index=False)[f2].agg({'{}_{}_list'.format(f1, f2): list})sentences = tmp['{}_{}_list'.format(f1, f2)].values.tolist()del tmp['{}_{}_list'.format(f1, f2)]for i in range(len(sentences)):sentences[i] = [str(x) for x in sentences[i]]model = Word2Vec(sentences, size=emb_size, window=5, min_count=3, sg=0, hs=1, seed=2222)emb_matrix = []for seq in sentences:vec = []for w in seq:if w in model:vec.append(model[w])if len(vec) > 0:emb_matrix.append(np.mean(vec, axis=0))else:emb_matrix.append([0] * emb_size)emb_matrix = np.array(emb_matrix)for i in range(emb_size):tmp['{}_{}_emb_{}'.format(f1, f2, i)] = emb_matrix[:, i]del model, emb_matrix, sentencesreturn tmp

最终模型

  • 训练模型前采用Lightgbm进行初步的特征筛选

  • 最后用我们非常熟悉的Lightgbm进行模型训练,单模型5折最终线上F1=0.8990

from feature_selector import FeatureSelector
fs = FeatureSelector(data = train_label[features], labels = train_label[target])
fs.identify_zero_importance(task = 'classification', eval_metric = 'multiclass',n_iterations = 10, early_stopping = True)
fs.identify_low_importance(cumulative_importance = 0.97)
low_importance_features = fs.ops['low_importance']
print('====low_importance_features=====')
print(low_importance_features)
for i in low_importance_features:features.remove(i)
def macro_f1(y_hat, data):y_true = data.get_label()y_hat = y_hat.reshape(-1, y_true.shape[0])y_hat = np.argmax(y_hat, axis=0)f1_multi = precision_recall_fscore_support(y_true, y_hat, labels=[0, 1, 2])[2]f1_macro =  f1_score(y_true, y_hat, average ="macro")assert np.mean(f1_multi) ==  f1_macroreturn 'f1', f1_macro, True
params = {'task':'train', 'num_leaves': 63,'objective': 'multiclass','num_class': 3,'metric': 'None', # [f1_0, f1_1, f1_2],'min_data_in_leaf': 10,'learning_rate': 0.01,'feature_fraction': 0.7,'bagging_fraction': 0.95,'early_stopping_rounds': 2000,
#         'lambda_l1': 0.1,
#         'lambda_l2': 0.1,"first_metric_only": True,'bagging_freq': 3, 'max_bin': 255,'random_state': 42,'verbose' : -1}
  • To do:

    • 将渔船每条航行的时序数据当做一个句子/段落/文档进行处理

    • 提取更深含义的渔船航线特征,学习到更高层次的渔船航线规律

    • 多模型加权融合or stacking(lgb,xgb,...)

更多精彩内容(请点击图片进行阅读)

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

个人微信

备注:昵称+学校/公司+方向

如果没有备注不拉群!

拉你进AI蜗牛车交流群

点个在看,么么哒!

【时序多分类赛题】2020数字中国创新大赛-智慧海洋建设top5方案(含源码)相关推荐

  1. 【算法实战篇】时序多分类赛题-2020数字中国创新大赛-智慧海洋建设top5方案(含源码)

        Hi,大家好!这里是AILIGHT!AI light the world!这次给大家带来的是2020数字中国创新大赛-数字政府赛道-智能算法赛:智慧海洋建设的算法赛复赛赛道B top5的方案以 ...

  2. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task2数据分析

    智慧海洋建设-Task2 数据分析 此部分为智慧海洋建设竞赛的数据分析模块,通过数据分析,可以熟悉数据,为后面的特征工程做准备,欢迎大家后续多多交流. 赛题:智慧海洋建设 数据分析的目的: EDA的主 ...

  3. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task3特征工程

    智慧海洋建设-Task3 特征工程 此部分为智慧海洋建设竞赛的特征工程模块,通过特征工程,可以最大限度地从原始数据中提取特征以供算法和模型使用.通俗而言,就是通过X,创造新的X'以获得更好的训练.预测 ...

  4. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具

    智慧海洋建设-Task1 地理数据分析常用工具 在地理空间数据分析中,常会用到许多地理分析的工具,在本模块中主要是针对常用的shapely.geopandas.folium.kepler.gl.geo ...

  5. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task5模型融合

    智慧海洋建设-Task5 模型融合 5.1 学习目标 学习融合策略 完成相应学习打卡任务 5.2 内容介绍 https://mlwave.com/kaggle-ensembling-guide/ ht ...

  6. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task4模型建立

    智慧海洋建设-Task4模型建立 此部分为智慧海洋建设竞赛的模型建立模块.在该模块中主要介绍了如何进行模型建立并对模型调优. 学习目标 学习如何选择合适的模型以及如何通过模型来进行特征选择 掌握随机森 ...

  7. 2020数字中国创新大赛 • 算法赛道冠军技术方案分享

    写在前面的话 作者说:我是来自京东数科的朱翔宇,也是此次大赛 Champion Chasing Boy 团队的 DOTA(常用ID),在与队友 鱼遇雨欲语与余(京东零售). 尘沙杰少.林有夕.嗯哼哼唧 ...

  8. 天池算法赛:数据挖掘经典赛事!DCIC 2020 数字中国创新大赛启动!

    2020数字中国创新大赛(Digital China Innovation Contest, DCIC2020),以"培育数字经济新动能,助推数字中国新发展"为主题,采取多赛道并行 ...

  9. 4373支队伍报名2020数字中国创新大赛-数字政府赛道 数字战“疫”彰显社会责任...

    2月25日,2020数字中国创新大赛-数字政府赛道进入复赛阶段.根据本赛道承办方--阿里云天池竞赛平台的数据显示,自1月1日赛事报名通道上线至今,共吸引了全球16个国家和地区共计4373支队伍参赛. ...

最新文章

  1. [Solution] The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
  2. 脚本重启nginx进程
  3. 在Linux下和Windows下遍历目录的方法及如何达成一致性操作
  4. 2021-10-11 寻找二叉树结点的前驱或后继结点(用到parent指针)
  5. 20190101.DDD笔记
  6. django防止csrf跨域伪造攻击
  7. mybatis-plus排除非表中字段
  8. protobuf java service_【java】protoc不生成.proto中的service,只生成model相关类,求助。...
  9. 也许,真的有2012
  10. Excel 2016 对数据做线性回归分析步骤
  11. 是计算机系男神女神用英语怎么说,生日快乐我的男神英文怎么写
  12. js下载文件 阿星小栈
  13. matlab 此上下文中不允许函数定义,错误: 此上下文中不允许函数定义。怎么办
  14. MySQL的文本导入load data local
  15. jquery实现滑动滚动条出现对联广告
  16. Linux按键响应测试
  17. python series转置储存到excel_P9:pythonpandas玩转excel文件
  18. 揭开手机天线材料LCP的神秘面纱
  19. 简洁明了的插值音频重采样算法例子 (附完整C代码)
  20. The class file xxx contains a signature 'xxx;' ill-formed at position 6 问题的解决

热门文章

  1. 利用OpenSearch API检索和下载数据 附Python代码实例
  2. Freemarker下载Word文档(文字+图片+表格)Idea示例 (附word展示图片异常解决方案)(附JPEG格式图片通过imageio.read方法读取为null解决方案)
  3. 《钢铁飞龙之奥特曼崛起》获赞 导演分享创作心得
  4. 计算机动画制作第一节教案,付雪_ 第四章动画制作_第一节制作逐帧动画——教案设计(7页)-原创力文档...
  5. valet mac_将Laravel Valet用于Super Quick Dev Server
  6. EXCEL表格-批量去除百分号%的三种方案
  7. 执法仪app音视频相关
  8. 宽php边框粗细_phpexcel导出excel外边框加粗,边框细线,合并单元格,换行,居中,上边距,左边距,打印设置...
  9. 实战element 的rate使用iconfont图标
  10. 《J2SE 回炉再造16》-------溺水狗