[Day 11] 来自未来的资料 - 数据泄露(Data leakage)

一、数据泄露(Data leakage)

在男性前列腺癌数据中,有个feature叫PROSSUG,代表着这个患者是否接受过前列腺的手术,
这个feature很难说是病人患前列腺癌的‘原因’(患心脏病的原因是接受过心脏手术?),
而更像是一个标记,当然与病人是否患有前列腺癌极度相关。
依靠着这样的feature训练出来的模型,肯定能够得到很好的预测结果,
但对实际了解男性前列腺癌的成因,没有一点帮助。

存在和利用这种倒‘因’为‘果’的feature的现象,叫数据竞赛中的Data Leakage。

From 论数据科学竞赛中的Data Leakage

二、股市中的数据泄露

数据泄露最常见的例子之一就是把未来资料的特徵当成训练集,
举个例子:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, shuffle=True)

这个语法很多人都用过吧,
没看过的这边简单说一下,该语法的作用就是将资料分成两堆,
一堆用作训练、一堆拿来检查模型的预测效果
为什麽该语法会有问题呢? 问题出在这里:

......, shuffle=True)

没错,他分资料的方式是把资料打乱抽选,这样会发生甚麽事呢?
要知道股市资料是典型的序列资料(Sequential data)
即前面与後面的资料有极强的关联性,随机抽选的话会直接打断该层连结
然而你会发现用这样训练出来的模型准确率异常高
为什麽呢,很简单,因为你把未来的特徵也加进去了:

试问假如今天我要用9月资料预测10月台积电价格,
结果你给的预测理由是:从10月的台泥开盘价看出来的,
https://imgur.com/MQt361K

三、尾语

为什麽会有这篇呢?
简单来说有个人试了半天预测模型,结果发现准确率都在50%左右
翻了半天论文发现大家都差不多,
论文的模型准确率在60%以上都算是优秀了,
Debug了半天後发现我参考的论文有这句:

It is important to note that the cases are not exactly consecutive trading days because we split our dataset randomly by shuffling.

From Deep Learning for Stock Market Prediction

呵呵,这个故事告诉我们论文来源要慎选,不然心态容易崩

https://ithelp.ithome.com.tw/upload/images/20210916/20141586nF7Hm86xLx.jpg

From Unknown (我真的找不到这张的来源......)


<<:  [Day15]PHP Class 类别02

>>:  Day 16 - 进行影像辨识训练

Day2React安装方式简介

安装方式 根据官网介绍,本次铁人赛会着重介绍下列三种安装方式: CDN连结 快速建立react环境的...

Day18 Combine 05 - Operators 类型介绍 : 转换操作符

转换操作符 map/mapError map操作符会执行给定的闭包,将上游发布的内容进行转换,然後再...

[Day14] 第十四章-使用JWT token来验证user跟登出api

前言 昨天我们完成了登入 接者今天我们来看看token可以做什麽用吧! 前端跟後端沟通时 我们就像拿...

Day 8 : Docker 基本操作 Image 篇

Docker 基本操作 简单讲解一下Docker的概念,最重要的是两个地方: Image,Conta...

[Day24] 在 Codecademy 学 React ~ 终於来到 Hook 的世界 ‧ useState 篇 (1)

前言 看到今天标题 useState, 你可能会说我前面不是讲过了吗XD 其实之前那样算是直接跳过第...