公司新闻

机器学习要求多大的数据量?我做的东西到底是不是机器学习?

题主在美国 研究生毕业想转行数据科学领域 自学了一些基本的比如coursera Andrew Ng的课 和Python做data science的课 也自己在Kaggle上面做了一些练手的项目 最近找了一份这方面的实习 是一个初创公司 估计老板是听说机器学习在金融领域是一个未来趋势吧 想试试水 感觉他自己也不是很懂这方面 公司里也没其他人懂

他是属于那种什么领域都懂一点 又不是很清楚的那种类型 主要还是比较懂金融领域吧

他们主要是分析预测每一个Sector的趋势 是涨还是跌

他给我的任务是让我做一个机器学习的模型来预测一个基金的走势

但是拿到data我傻眼了 一共只有85行,10列

这和我以前做的不一样啊喂 算了。。反正我也不是很懂 就按我以前练的做吧

插一句: 为什么数据这么少呢?想要预测的基金就只取了每个月的 用了差不多7年也就是85个月的数据

我问为什么不用每天的基金价格来增加数据量 他说因为他们选的feature很多都是一个月或者一个季度公布一次的指标 比如美国货币指数啊 GDP啊这些 没有每天更新 所以没法用每天的基金价格

后来用了Ridge regression 发现由于数据太少 overfitting很严重

之后自己看了一下每个feature和要预测的基金的correlation 手选了几个feature 情况好了一些

今天老板就问我啊 说你这个machine learning. Learning的过程在哪里呢? 你这个和普通的统计学上面做regression有什么区别啊。至少你的machine要帮我选选该用哪些variable吧?

我仔细想了一下 好像确实没有什么区别 老板让我明天回答他 我到现在都不知道怎么讲

后来我问了一个在微软和facebook做machine learning做了7,8年的朋友

他告诉我说: 数据小, feature少的时候machine learning就是做统计

不过选variable这个倒是真的有feature selection这种事 不过数据这么小 做不了吧? 又不能在training set上面做feature selection

对不起 楼主是个话痨

总而言之一句话: 请问这么小的数据做machine learning真的科学吗?

我该怎么跟老板说 应不应该跟他提建议让我做做别的项目 跟他提提有什么金融领域真正用的machine learning?

这么少的数据,机器学习和深度学习都帮不了你。这么少的数据,就用人工分析吧。

一般至少要几万数据吧。

大兄弟,我实话告诉你,你做的是机器学习,也是统计学习。

---------------------------------------------------------------------

我做机器学习,或者说统计学习这些年的经验是:

1. 实际应用中大数据量可遇不可求,所以所有以神经网络为基础的算法一般效果都不好。

2. 实际应用中我们要求模型的可解释度,所以偏向于选择表现正常且可解释的模型。这样的模型有两种,一种是广义线性模型,一种是以决策树为基地的模型。

3. 你做的这个模型根据描述没什么太大的用,回测可能效果还可以但放到真实数据上肯定不行。首先不谈数据量,你这个模型明显是时间序列吧?直接做回归其实丧失掉了时间这个维度。

那么问题来了,如果老板问你让你选择变量重要性,你怎么办?

我推荐你使用 gradient boosted decision tree regression来做回归,做完以后查看r^2来看看拟合程度,怕过拟合就用交叉验证算r^2。用这个模型最大的好处是,它会自动生成一个模型重要度的排序...

代码很短,就像下面这么长:

之后你还可以得到不同变量的重要性(数值越大越好):

除此之外你还能做些什么?

  • 分析变量间的线性关系
  • 分析每个变量和预测值之间的线性关系

做这些大概可以给你的老板交差,给他提供一些思路,至少告诉他为什么项目做不到他想要实现的效果。

---------------------------------------------------------------------

至于你该怎么委婉的老板说现在这个方案不靠谱,有两个建议:

1. 你自己对这个领域加深了解,确保比你老板懂得多,不然很容易被他反问住。

2. 慢慢来,对于不靠谱的项目,先从里面发掘一些价值,至少不至于毫无所获。比如可能变量重要性在这个项目里面还是有一些意义的。慢慢给你的老板科普知识,但不要直接就跟他说:“你丫就一sb。。。”

祝你好运:)

重点回答头一个问题,因为这也是很多机器学习研究者普遍存在的问题:“我的项目需要多少训练数据?


高性能模型与低性能模型之间区别的一个重要原因就是训练数据的质量。因此,为了确保你的 AI 应用能够具有最大性能,必须弄明白你需要多少训练数据。


然而,这个问题经常让不少开发者非常苦恼。实际上,这个问题回答起来比看上去要复杂的多,因为其中要涉及到很多因素,比如你使用的模型类型,模型在实际业务中的用途等等。下面我们看看围绕需要多少训练数据出现的痛点,然后探讨针对自己的项目需要多少训练数据。


为何很难预估你的数据集大小?


确定目标数据量的许多困难源于训练过程的目标。有很多文章都讲到了模型训练过程的工作原理,但要记住,我们训练的目的是构建一个能理解数据背后模式和关系的模型,而不仅仅是理解数据本身。收集数据时,我们需要确保所拥有的数据数量能教会算法数据中的关系,以及数据和结果之间的关系。


这看起来很容易预测。但实际上机器学习项目的目标多种多样,可以产生大量的训练数据类型。因此,每个项目都有各自独特的多种因素,这使得提前计算数据需求变得非常困难,可能包括以下部分或全部内容:


  • 模型的复杂度:模型为完成任务而必须考虑的每个参数都会增加训练所需的数据量。例如,用于识别特定汽车品牌的模型具有少量的参数,主要与车辆的形状相关。而如果是一个必须从长远考虑汽车成本的模型,不仅要顾及到包括汽车品牌和状况的因素,还有经济和社会因素。由于这种复杂程度更高,第二个模型需要比第一个模型更多的数据。


  • 训练方法:由于模型必须理解更多的互连参数,由此导致的复杂性使得训练模型的方式也被迫发生改变。传统的机器学习算法使用结构化学习,这意味着它们很快就会出现附加数据投入产出比很低的情况。相反,深度学习模型可以找出自己的参数,并学习如何在没有结构的情况下进行改进。这意味着它们不仅需要更多的数据,而且还有更长的学习曲线,其中进一步增加数据具有积极的影响。因此,你使用的训练方法会导致对你的模型有用的训练数据量发生显著变化。


  • 标签需求:根据实际任务,我们会以不同方式注释数据点。这可能会导致数据生成的标签数量,以及创建这些标签所需的工作量发生明显变化。例如,如果我们有1000个输入数据句子用于情感分析,我们可能只需要将它们标记为正面情感或负面情感,因此每个句子产生一个标签。但是,如果对同样1000个句子进行注释用于实体提取,则可能需要为每个句子标记5个单词。尽管具有相同的原始输入数据,但是一个任务产生的标签比另一个任务多五倍。因此,我们准备数据的方式可能会影响项目所需的工作量和花费的成本。


  • 误差容忍度:模型在你的实际业务中的预期作用也会影响数据量。对于预测天气的模型,20%的误差率是可接受的,但如果用于检测有心脏病发作风险的患者,这个误差率万万不可。在边界案例方面的改进可以降低这种风险。如果你的算法具有高度风险规避或者对于项目能否成功至关重要,那么你需要的数据量会大幅增加,才能追求完美性能。


  • 输入的多样性:我们生活在一个复杂的世界中,可以向模型输入各种类型的输入数据。例如,聊天机器人必须能够理解各种语言,哪怕它们是用一系列正式,非正式甚至语法不正确的风格写就的。如果无法高度控制模型的输入,就需要更多数据来帮助你的模型在不可预测的环境中运行。


从上面这些因素可以清楚地看到,我们需要的数据量取决于项目的独特需求和预期目标。最后,项目负责人必须自己平衡这些因素,并提出自己的目标。那么有没有什么方法呢?

有,接下来就看看有哪些方法可以帮我们在刚开始时确定所需的数据量。


我们该如何计算数据需求?

确定任何给定算法所需的确切数据数量可能无法做到。幸好,基于整体预估的方法能帮你分析项目的训练数据需求量,以下两种方法均可:


  • 10 倍法则:一个常见的经验法则是模型通常需要超出其自由度 10 倍的数据量。这里的自由度可以是影响模型输出的参数,是数据点的一个属性,或者更简单地说,是数据集中的列。10 倍法则的目标就是是抵消这些组合参数为模型输入带来的变化。对于复杂模型而言,这可能没有帮助。但是,这条法则能让我们快速估算数据集的数量,保证项目保持运行。


  • 学习曲线:如果你已经有一些数据并希望根据更多事实情况做出决策,可以考虑创建一个研究示例,根据数据集的大小来评估模型的能力。通过把结果绘制在图表上,你应该能够找出数据集大小与模型能力之间的关系,同时还要确定什么时候添加更多数据的收益会不断递减。这种方法需要更多人力工作,包括创建一些逻辑回归问题,但至少比简单一猜要靠谱得多。


通常,最好在刚开始时用手头已有的数据训练模型,在你认为有必要时再添加更多数据。一旦项目取得一些结果,你对数据的需求会越来越明显。不过,有些朋友还是希望能在项目开水前有个确切的数字,下面是我们在网上找到的项目数据集大小的一些估计。也许这些例子能让你对自己项目所需的数据集大小心里有个数。


数量 VS 质量

数据的局限性也会是模型的局限性。但是,在所有关于你需要多少数据的讨论中,不要忘记这条也适用于数据质量和数量。对于模型来说,一百万个混乱的数据反而不如 100 个干净数据,后者实际上更有助于算法达成目标。无论你正在搭建什么样的模型,都要确保正在使用的数据能为你提供坚实的基础和最佳的成功机会。


此前知名机器学习博主 Jason BrownLee 曾发过一篇文章探究机器学习究竟需要多少训练数据:machinelearningmastery.com


在文中,Jason Brownlee 也认为训练机器学习模型需要多少数据要根据很多因素,比如:

  • 问题的复杂程度
  • 机器学习算法的复杂程度


Jason BrownLee 也根据自己从事机器学习研究的经历,分享出了一些估算训练数据数量的经验:

  • 使用统计学启发式搜索来计算样本数量,其中要考虑到类的数量、输入特征的数量以及模型参数的数量。
  • 非线性算法往往需要更多数据。一般把复杂的机器学习算法称为非线性算法,它们可以学习输入和输出特征之间复杂的非线性关系,但也需要更多的训练数据。Jason认为,对于简单的线性算法,每个类需要几百个训练样本,对于复杂的非线性算法,每个类需要几千个训练样本。


希望以上提及的这些方法对大家在确定训练数据数量时有所帮助。


参考资料:
gengo.ai/articles/how-m
machinelearningmastery.com

黑五全场特惠中,欢迎来访集智课堂:

主页 | 景略集智

10倍法则的话差不多哦

一点拙见,数据量需要多少其实和具体的问题,数据场景关系很大。

比如老一辈统计学家Fisher他们做农田实验,有几十个样本就可以开干做假设检验,得到统计推断结果了(机器学习、统计学习没有泾渭分明的区别,暂且举一个统计的例子)。有的数据,比如生物,医疗,农业生产,数据中的信号是通常是很强的,这时候用小样本就可以得到显著的统计推断。

题主想要做一个金融相关的模型,金融数据公认是信噪比很弱的,就是噪声很大,随机波动很大,而信号相对较弱。比如,如果来看每个周的上证指数波动,它本身就处在市场各方力量的博弈之下,空头多头大军厮杀之中,某一周指数涨了,很难说是在波动范围内还是真的有上升趋势了。对这样的数据,想要得到靠谱的结果,一般确实需要数据量大一些。而且金融数据上通常模型会需要高强度用到随机过程,时间序列的方法。


对于题主这个课题,两点微小的建议哈

1.预测涨跌不一定是个很好的目标,比如涨1%和涨10%都是涨,但是实际投资肯定不会涨1%就冲了。很多金融分析的关心是预测收益率和波动这俩目标,用资产的收益率和波动来作为投资决策的依据。我觉得是可以先看看金融人主流的做法是啥。模型很多会用时间序列分析的模型,比如GARCH,还有因子模型,都可以参考一下。

2.我感觉目前数据少,有一个比较大的原因是"将就最了低频的那个数据",因为报告是月度的,所以其他数据也对齐到月度了。实际上不压缩其他数据也是可行的,可以用混频的模型,就是当数据既有高频,比如日度的金融时间序列甚至日内的记录,也有低频,像月度的gdp啊这样的,可以一样建模。这样的话可以利用的数据信息要多很多。中国人民大学的吴奔老师有发过关于混频金融数据建模的文章,可以参考~

平台注册入口