作者TreeMan (好啊...)
看板DataScience
标题[心得] 实验:ML web app for general user
时间Thu Oct 4 14:46:52 2018
文长慎入
如有问题或建议,请不吝提出 感谢
目前在规画不同的预测分析应用 (e,g 旅游景点人挤人指数预测XD)
语言将改用python,看看比起R + shiny,在架web app上会不会更好
----------------------------------------
实验目标:
利用机器学习(ML)或资料探勘的工具,提供一般user会有兴趣的预测分析
同时让使用者可以自己上传自有资料,改良模型的预测效果
本次实验完後,未来改进要点:
1. 更轻量的应用
2. 除非有产生data的配套,否则不再搭配自建模功能
----------以下是本次实验的说明----------
一、结果与讨论:
结果:预测股票市场隔日大盘收盘价为目标的web app,功能如下
简化版 (无线上ML功能):
https://goo.gl/6vyiDj
完整版:
https://goo.gl/i7L8sG (帐密为mmtest001)
预测分析:藉由web app的形式,让使用者可以在股市开盘前
看到下一个交易日台湾加权指数/台指期的预测值
半自动化建模:使用者上传的资料,将经过简易的前处理/特徵工程
再混合选定的母系统的资料集,以半自动的方式重新产生预测值
图书馆:将历史资料图形化後,供使用者参考
自8/12分享app连结於stock板後,累计至10/3约53天
1. 817个使用者点选过简化版app (无建模功能,但如有询问,就提供帐号密码)
93.3%来自台湾,6.7%来自美国、日本、加拿大等
2. 4个使用者使用过完整版app,1个成功产生更好的预测
3. 简化版使用者计数来自Google Analytics,完整版来自信件询问人数
讨论:
1. 原本选择股市预测是直觉投资人应该会收集历史资料 来进行分析
因此设计此app多提供一个让他们量化分析的工具
然而结果只有不到1%的人有资料有兴趣尝试
初始分开app也似乎不是这麽需要了 (本来要要比较好控制server资源)
2. 测试组:数值预测误差60点,涨跌预测准确度65%
其中一位有长期试用建模功能的user
其最後数值预测误差60点,但涨跌预测准确度上升到74%
3. 有些user表示预测值,对资料图书馆也没有兴趣
这些user通常为轻量型投资人 (一年可能买个几张,而且快速脱手)
4. 前3天新user就有728位,後续增加速度非常缓慢,且会回来看的人也少
近一个月多维持在2-3人/天
分析可能原因:
4-1. 手机观看是个悲剧 (e.g. 互动式图表,让user不好滑萤幕)
4-2. 一开始server资源设定给简易版不足,很多人连不上去或看不到
4-3. loading时间太长 (肇因於首页的一个plot的程式没写好)
4-4. Chrome loading时间比IE多快1倍...?
4-5. 无中文化
4-6. 预测无用或与使用者需求不符
关於4-6. 在与完整版user访谈时,有2位都表示
强力需要台指期每分钟或per tick (成交一笔?) 的预测
给後续有兴趣开发的人参考
5. 参加比赛後的晚宴,里面有投信的量化投资研究员
他们表示也在尝试将ML用在量化投资上,但多使用较为基本的演算法
deep learning一是没有提高太多的表现
二是无法说明,对於主管要aprrove蛮困难的
二、资料来源与爬虫
1. 本国指数/个股资料:证交所、期交所、柜买中心
2. 国外指数:yahoo, investing.com
3. 其它:google trend
4. 爬虫:依据网站,用R的XML, jsonlite, rvest, httr组合而成
三、使用工具:
语言:R
web app & server:shiny.io
自动化建模功能:基於H2O package的autoML功能,修改成可多人同时使用
plot:plotly, highcharter(付费), ggplot
四、资料处理与H2O建模设定细节
1. 国内的资料比较没问题,唯一要注意的是台指期月中会结算
例如你正在爬的资料最近月是9月,假设9月15日结算,隔日最近月变10月
那你结算隔天收盘价就不能用9/15的9月期指,而是9/15的10月期指收盘价
此外,虽然我每个query都间隔5-17秒,大项目完成间隔30-60秒
後来还是会被ban ip,对於要持续更新模型是一个麻烦
2. 国外的很容易有错误或单位误载,必须先人工抽样检查
或者与其它网站的数值抽样交叉比对
此外,交易量有时台湾开盘前会无法结算出来
或者交易量是最後一笔交易量,而不是当天全部的交易量
要改良这点,以国外期货来说,可以去芝交所爬结算前的交易量
最後,是国内放假,国外仍有开盘的状况下
建资料集时要确认数值没有错位的问题
没使用quantmod:资料会有错,特别是在近期的资料
3. 主要用的特徵值
3-1: 前天收盘价的涨跌幅
3-2: 前天收盘价相对近期(20, 60, 120交易日)收盘价中位数的百分比
交易量的部分,如前所述,常在预测当天会是missing value
因此无载入相关特徵
4. 建模资料集依时间拆成三部分,从资料起始时间到现在约2800笔
testing set: 最近期150笔
validation set: testing set後450笔
training set: 剩下的2200笔
5. 使用H2O的autoML的GBM演算法建模
在web app版本中,有限制建模时间为10分钟,使用者上传资料容量上限10MB
同时在每次建模时,会重新连线到H2O,否则有时会有bug而无法更新模型
但也失去其原本设定的记忆功能
6. 在模型准确度的监控上,我尝试使用SCHILLING的
length of the longest success run
假设模型测试组准确度为65% = 0.65
失误率p = 1-0.65 = 0.35
q = 1-p
在近n天的模型表现可产生一个eq: nqp^L = 1
将前面的数值代入可解得L,我把它叫做length of the longest faliure run
前提是nq >> 1 (tricky...hmm) 我让n = 20
去产生目前准确度允许最大的连续失败次数
如果实际连续失败次数大於L时,就去检讨模型有何问题
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.173.77.253
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1538635614.A.08E.html
1F:推 sma1033: 对於股市预测的应用来说,我想大多数人都是只想要快速的 10/04 14:58
2F:→ sma1033: 知道是不是拿来赚钱而已(当然是不太可能啦...) 10/04 14:59
3F:推 sma1033: 我猜一般人应赅没兴趣知道背後复杂的模型或是理论啥的(?) 10/04 15:05
是的,主要是用起来的感觉 (记忆中的数字...hmm)
只有像文中提到长期测试的职业操盘手,才会问的很仔细
但对於一次要赌到收盘,不适合他的操作习惯
所以才真心希望出每分钟版的XD
我还有接触过印刷仲介业、电池电压sensor厂商、游戏公司(一般和博奕)
目前只有sensor厂有做过初步的分析 (因为没label,所以只先试用kmeans)
他们的数据是从讯号分析开始的 但至少有data
其它是知道"大数据"、"AI",但不会想去用
印刷传产是数据都习惯记在脑中
游戏商有其它的考量,特别是博奕
也许同业间开始广为采用,他们才会想去用
找到lead user就变成关键了
4F:推 dishuman: 感谢分享 10/05 09:32
5F:推 woogee: 感谢分享 10/05 12:18
※ 编辑: TreeMan (122.121.138.40), 10/05/2018 20:50:13
6F:推 sma1033: 感谢你的分享,毕竟也是紮紮实实的做了很多功能 10/06 00:14
7F:推 sma1033: 我是觉得目前DL的方法除非能够做到其他方法做不到的事情 10/06 12:01
8F:→ sma1033: 不然其实一般人可能不会特别想用,因为DL的方法也是有很 10/06 12:02
9F:→ sma1033: 多缺点,像是Model可解释性差,需要硬体支持,资料难取得 10/06 12:03
10F:→ sma1033: 容易过度最佳化...等,所以一般人如果没有看到立即的好处 10/06 12:05
11F:→ sma1033: (ex.影像辨识这种其他方法较做不起来的Task),不然应该 10/06 12:07
12F:→ sma1033: 试一下就会放弃了,这也是DL技术应用在业界常见的状况 10/06 12:08
13F:推 sma1033: 毕竟对大多数人来说,「快速赚钱」>>>> 「研究资料科学」 10/06 12:12
14F:推 sma1033: 真的愿意花时间研究资料的人应该是少数中的少数...XD 10/06 12:15
15F:推 st1009: 感谢分享 10/06 13:15
16F:推 michellehot: 推 感谢分享 10/06 18:51