公告
周五BI飞起来,每周一个主题,一场跟数据有关的行业、工具、技术的交流盛宴,锁定在每周五晚20:30,不见不散!
本期Friday BI Fly微信直播主题:大数据挖掘:系统方法与实例分析
预告一下未来几期的微信直播活动分享主题将包括谈谈BI在生产企业的应用、看大数据职位学数据场技能、数据科学家应用 、SPSS数据挖掘、腾讯大数据分析与挖掘应用、R语言实战、数据挖掘经典案例赏析等,具体日期安排请关注天善智能问答社区活动版块https://www.hellobi.com/events
主持人:加入本群的同学们,感谢大家参加由天善智能举办的 Friday BI Fly 活动,每周五微信直播,每周一个话题敬请关注。
【群规】本群为商业智能和大数据行业、技术、工具的交流学习群。不准发广告,只能发红包,发广告者一律移除微信群。
本次微信直播讨论内容
1、R基础介绍
2、时间序列
3、量化策略建模
本期嘉宾介绍
张丹 前况客创始人兼CTO,10 年的IT编程背景,多项SUN及IBM技术认证,连续创业者。丰富的互联网应用开发架构经验,精通R ,Java, Nodejs 多种编程语言,掌握大数据处理,数据挖掘等核心技术,有统计和金融的知识积累。熟悉金融二级市场、交易规则和投研体系。多次在IT互联网技术大会中担任演讲嘉宾。著有《R的极客理想-工具篇》、《R的极客理想-高级开发篇》图书,自媒体平台http://blog.fens.me, Alexa全球排名80k。
直播内容
咖啡@天善智能:
大家好,我是微信直播活动的主持人咖啡,每周一个主题,一场跟数据有关的行业、工具、技术的交流盛宴。我们的口号是“Friday BI Fly 周五BI飞起来”。
本期讨论内容:
1、R基础介绍
2、时间序列
3、量化策略建模
咖啡@天善智能:
今天有幸请到了背景这么给力,并且在R方面已有两本著作的丹哥,给大家带来R语言方面的分享,重要的是丹哥还懂金融,还会给大家讲解量化策略建模,小伙伴们是不是眼睛都亮了!快有请丹哥吧!
张丹:
大家晚上好,感谢@咖啡的介绍,非常荣幸能够有机会与这么多数据挖掘爱好者或R语言的使用者一起交流,希望今天的交流能让大家有所收获。
今天主要给大家介绍,在量化投资中为什么要用R语言。
我是第一次进行微信直播,主要用文字的方式来进行介绍,由于不能分享屏幕,代码部分会通过图片截屏,或者直接去我的博客上看。
不知道大家之前是否都用过R做数据分析?是否用R做过量化交易模型?
用R做量化策略细节非常多的,并不是一次分享可以说完的,今天的介绍主要以思路为主,并不涉及到具体的建模过程。具体的问题,我们私下继续沟通。
本来我想的主题是“R语言,为量化而生”,标题名虽然有点大,但R语言真的很适合做量化策略。因为金融就是玩数据,R的最大的优势就是数据分析,所以用R来做量化投资的策略,是非常方便和顺手的。
张丹:
那么为什么是R语言?而不是其他的语言? 先简单介绍一下,我们的个人经历。
我是一个程序员,从2004年开始接触Java写了10多年的Java程序,期间还尝试过多种编程语言,VB、PHP、Python、SAS、R、Nodejs,最后把自己锁定在R,Nodejs和Java。
谈不上对每一种语言都有很深的理解,但是每种语言的特点还是有点心得。
之所以,把自己锁定在R,Nodejs和Java这3种语言上面,有一部分情怀,更多的是理性。
从技术发展来看,编程开发变得越来越简单,10年前用JavaEE做一个简单的web项目至少要2人月,现在用Nodejs新人边学边搞只需10人天。
而且随着业务的多样化,单一的技术已经不足以支撑业务的发展,业务在从传统的软件业务向互联网和数据产品的方向在进化。根据不同语言的特点,都将在开发中占据一席之地,而很难在出现一种语言一统天下的情况。
R语言在数据分析领域发挥着重要的作用。
R语言的3个特性,数学计算,数据建模,可视化。
张丹:
R语言封装了各种基础学科的计算函数,我们在R语言编程的过程中只需要调用这些计算函数,就可以构建出面向不同领域、不同业务的、复杂的数学模型。
R的知识体系结构是复杂的,要想学好R,就必须把多学科的知识综合运用,所以最大的难点不在于语言本身,而在于使用者的知识基础和综合运用。
张丹:
图中我将R语言知识体系结构分为3个部分:IT技术 + 业务知识 + 基础学科。
IT技术:是计算时代必备的技术之一,R语言就是一种我们应该要掌握技术。
业务知识:是市场经验和法则,不管你在什么公司,都会有自己的产品、销售、市场等,你要了解你的公司产品有什么,客户是谁,怎么才能把产品卖给你的客户。
基础学科:是我们这十几年在学校学的理论知识,当初学的时候并不知道是为了什么,毕业后如果你还能掌握一些知识并实际运用,那么这将是你最有价值的竞争力。
关于R的知识体系,可以参考文章,R语言知识体系概览,http://blog.fens.me/r-overview/
对于金融量化投资来说,刚好是一个交叉学科,你需要懂IT技术,熟悉金融市场的规则,有数学建模的能力。R语言,正好可以帮我们来解决这样的问题,所以“R语言,为量化而生”!
对于做过数据分析的人来说,大家都了解,什么是最费时间的!!那就是数据处理的部分。
张丹:
第二部分,我们来介绍一下R语言的数据类型和数据处理的一些方法
当然,本文并没有介绍如何入门R语言。新手入门请参考文章, R的极客理想系列文章,http://blog.fens.me/series-r/
这里有50篇关于R语言的文章,供你学习。
张丹:
2.1R语言的基本数据类型
在R语言中,数据类型包括向量类型,字符串类型,数字类型,布尔类型,矩阵类型,数据框类型,list类型等,通常我们在使用R语言里做数据处理的时候,大部分都会以数据框(data.frame)类型为一个主要的数据内存类型来使用
数据框(data.frame)类型是R语言内置的一种数据类型,我们可以简单地把它理解为,与关系型数据库中表的结构是类似的,是一种二维的数据结构。
正是由于R语言内置了这样的数据类型,使我们从数据库读取数据或导入CSV格式的数据时,与R语言有了一个很好的映射关系,直接加载到R语言的内存中变成标准化数据格式。
张丹:
然后,就可以基于标准化的数据格式,用R语言的功能函数来处理数据了。
比如,对于做数据库开发的人员来说,他可以使用sqldf包,在R语言中通过SQL语句对数据进行数据变换。
同时,也可以按着数据框(data.frame)的标准方法进行数据处理,通过约定的 向量索引下标 的方式来按行按列来读取数据,
或使用功能函数处理数据。
张丹:
我们经常还会对数据进行转型处理,把数据框(data.frame)类型和其他数据类型的进行转化。
我们有时会使用矩阵计算,R语言中默认供了矩阵(matrix)数据类型,可以很方便地把数据框转类型成矩阵类型,有时也需要把数据框的某一行或某一列转型为一个向量类型数据,或者把数据框变成一个list类型。
过数据的格式变换,用标准化的数据结构来满足数据分析的要求。
虽然R语言是统计语言,从性能上来说比C++/Java等语言慢不少。
但对于数据分析的业务场景,用R语言来做数据处理的时候,你不用考虑程序如何架构,指针怎么定义,内存是否会泄露,只要关注你的数据和算法就行了。
张丹:
唯一需要注意的一点,不要直接用for循环的方式处理数据,尽量使用向量计算或矩阵计算的计算方法。
当必须用循环的时候,你就需要用apply家族函数,代替for循环来做数据处理。关于apply家族函数的用法,请参考文章掌握R语言中的apply函数族
如果你的数据量比较大,1GB,10GB,甚至有100GB,对于这种规模比较大的数据集,apply的计算方式就不太能满足计算性能的要求了。
你依然可以用data.table包, bigmemory包, ff包等,或者并行计算的包加速R语言在单机上的计算的性能。
data.table的使用方法,请参考文章超高性能数据处理包data.table, http://blog.fens.me/r-data-table/
张丹:
那么再大规模的数据,超过1TB这个量级,不只是R语言,每种语言都会遇到计算性能的瓶颈。这个时候,我们需要把数据放到分布式系统中,如Hadoop或其他大数据的引擎中进行存储和计算。
R语言与各种的大数据平台的通信接口都是通的,比如RHadoop,rhive, rhbase, rmongodb, rCassandra,SparkR, sparklyr等。
如果你想了解hadoop的知识,请参考文章Hadoop家族系列文章(http://blog.fens.me/series-hadoop-family/),RHadoop实践系列文章(http://blog.fens.me/series-rhadoop/), R利剑NoSQL系列文章 之 Hive(http://blog.fens.me/nosql-r-hive/)。
张丹:
2.2时间序列类型
除了R语言的内置基础数据类型,对于金融的数据处理,一般我会把它变成标准的时间序列类型的数据,R语言中基本的时间序列的类型为 zoo 和 xts类型,当然还有一些其他包提供的数据类型。
张丹:
关于zoo和xts的详细介绍,请参考文章 R语言时间序列基础库zoo(http://blog.fens.me/r-zoo/),可扩展的时间序列xts(http://blog.fens.me/r-xts/)
通过类型变换可以很方便地把的data.frame或者matrix等基础类型数据,变成xts时间序列类型的数据。
时间序列类型的好处是它默认会以时间作为索引,对于量化策略来说,每条数据记录他都会有数据产生的时间,那这个时间就正好可以作为索引列的时间。
张丹:
data.frame和xts时间序列类型的转换的例子
那么以时间作为数据的索引列的好处是,可以很方便地把数据以时间维度进行对齐。
比如,你设计了一个股票交易策略和一个期货交易策略,由于股票是T+1交易,今天买了明天才能卖;而期货是T+0交易,今天买了马上就可以卖出。
根据不同的市场规则,在设计交易策略时,可能就会选择不同的交易周期,那么这时两个策略的交易周期就会不一样,那么时间维度可能也不是对齐的。
如果这两个策略是对冲的,那么我们就需要把它们以时间维度进行对齐,才能进行实现对策略模型对冲的准确计算。
把不同时间的维度的数据转化成同一个时间维度,相当于做时间的标准化。通过标准化的操作,让数据变成同一时间维度,数据之间才能够进行计算。
我们做股票交易,在实盘交易过程中,你可能最关心的是每秒最新的价格数据,每一秒都会产生一条数据,这是属于日内交易策略。
另外,我们再做一个周期稍微长一点的策略,以日线为基础的,那么这里一条记录就是一天收盘价。对比日内策略,1秒钟一条数据和1天一条数据,它们不同维度的数据,是不能直接进行计算。
我们要处理这种不同周期维度数据的时候,就需要把数据转成同一个维度的。
比如,我们对日线和周线的数据进行合并的时候,可以是把周线数据拆成日线数据,就是把一周分成五天。
反过来,也可以把日线数据合并为周线数据,把5天的数据合并成一周。
所以这个时候就需要一个统一的数据格式进行标准化的数据定义,zoo和xts就是我们作为时间序列基础数据类型。
这两个包是由第三方开发的,提供了很丰富的时间序列处理函数,我们可以直接使用这些函数来操作金融数据。很多其他的第三方金融算法分析包,也都是以这两个包作为基础开发。
张丹:
3.R语言和金融模型
当我们掌握了R语言处理数据的方法,了解了如何使用R语言的基础数据类型和时间序列数据类型,下面我们就可以构建金融的策略模型。
金融建模跟其他行业的数据建模是类似的,只是由于行业不一样,金融行业有很多背景知识和金融市场规则需要我们了解。
金融本身就是一个玩数据的行业,你可以通过获得交易数据,财务数据,上市公司的各种事件数据,基本面数据,宏观数据,舆情数据,互联网数据等,来构建你自己的交易策略。
我们需要把这些数据进行组合整理,结合你自己对业务的理解,使用R语言从数据中发现规律,并构建交易模型。
用程序对历史数据进行回测,来验证规律的可靠性,是否会长期有效,并控制风险,最后把验证过的规律变成算法模型,这个就是金融策略建模的过程。
从金融交易分析的角度,可以从3个维度进行分析 基本面分析,技术面分析和消息面分析。
基本面:指对宏观经济、行业和公司基本情况的分析,包括公司经营理念策略、公司报表等的分析。长线投资一般用基本面分析,通过基本面可以判断是否值去交易。
技术面:指通过技术指标变化,判断股票走势形态,进行K线组合等,通过技术面可以判断如何进行交易。
消息面:指上市公司发布的利好和利空的消息,通过消息面可以判断市场的情绪。
对于量化模型,大部分都是基于技术指标的模型,通过技术指标建模,跟踪市场的表现。在不完全了解金融业务和金融市场的情况下,通过几个技术指标来监控市场的走势,发现市场的机会也是有可能的。
量化交易和主观交易并不是对立的,量化交易是对主观交易的补充,当我们以数据作为决策基础的时候,其实可以尽量减少拍脑袋过程,创建数据模型也可以给我们心里建立良好的信心。
如果交易没有使用量化的方法,那就跟我们平时做事一样,你可能想到什么就是什么。
没有数据基础,那完全就是感觉,这样子交易就是很容易赔钱。
张丹:
对于中国的很多散户,听到一个消息就跟着风的买卖股票,或者凭自己感觉大盘该涨了就跟进去,这些操作其实都是很不理性的。如果你通过量化的方法,即使再简单,就靠几条均线来进行判断,这样也是能给自己一个数据的基础,建立信心,而不是完全拍脑子的事儿。
量化交易模型主要是以技术指标为主,常用的技术指标有不少,虽然简单但还是很有用的。
对于很多实盘上运行的量化策略,大都会基于这些基础的指标,但并不是每个指标单独使用。而是把多个指标通过变换组合使用,比如说MACD是均线模型,大部分的趋势策略,都以MACD做为基础指标,通过变换再生成新的衍生指标。
常用的技术指标还包括,KDJ、Boll、RSI、CCI等,当你直接使用这些指标的时候,可能效果并不是太好。因为市场上已经普遍接受了这些技术指标,已经被大量使用,单纯地用一个指标,你掌握的信息并不比别人多,所以你可能抓不到市场上赚钱的机会。
我们需要把多种技术指标或者多个维度的指标进行结合,通过组合优化的方式来降低策略的不确定风险,同时提高收益率。
如果你找到了一个只有你自己知道市场规律,你的策略产生的信号完全是跟别人有区别的,你才能抓住别人看不到的机会,这个才是你的赚钱机会。
建立量化模型,其实和我们平时做数据分析的思考方式是一样的。
你领先的越多,越少人知道这个规则,那你可能赚钱的机会就越多。
所以要把这件事做好,我们需要把IT技术,业务知识和基础学科知识做进一步的结合,当你发现这个结合是属于你自己特有一个知识体系,你才能更好的发挥你的才能。
张丹:
我们为什么要用R来做这件事情?
首先,R语言本身提供了很多数学、统计的基础包,让数学计算变得非常容易。R语言提供了常用的数据结构,向量、数据框、矩阵等,把数据变成标准化的数据,你的关注点只在数据上就可以了。
另外,R语言是免费开源的,很多的第三方开发者提供了丰富的数据挖掘包,让你可以方便的使用各种算法模型,短短几行代码,就可以搞定一个复杂的事情。
R语言,在金融领域提供了很多交易框架或者计算模型,如果你了解了金融的理论知识以后,同时有一定的金融市场经验,你可以很方便的利用这些别人提供的这些技术框架,来构建自己的交易模型。
CRAN上发布的金融项目,你可以去 R的官方网站 (https://cran.r-project.org/),找到Task Views 菜单里的 Finance标签。
张丹:
通过调用第三方的程序包,自己的代码量就变的非常少。我们做一个R语言的策略,如果是很复杂的,你可能要写100-200行。
但是如果你要实现同样复杂的策略,放到C++/Java去实现,这个策略就是没有1000-2000行是不可能实现的。
虽然说R语言在性能上有些问题,但是我们会有多少的交易策略是基于高频的模型,对性能要求极高的呢?
其实很少。就算是高频交易策略,几秒钟交易一次,R语言都可能满足要求。
张丹:
海量金融数据我们怎么处理呢?
我们可以把基于海量数据的计算变成离线模型,金融行业每天都会产生大量的数据,像每日产生的交易数据,中国市场每天可能都是以GB的量来增长,跟互联网比起来不是很快,但对于你程序加载10年的数据,至少也要GB或TB的一个量级。
R语言本身真的很难处理这种量级的数据,但是这种量级数据对于其他语言来说同样是很难处理的。我们并不需要把这种体量的数据,都加载到内存中,进行实时数据计算。
张丹:
变成离线的计算模型,仅用于建模回测。把海量数据能变成离线的方式,放到hadoop或spark计算,用海量数据进行模型的训练。
我们用到的实时数据,一般就是一天或几天的数据,不会很大。每天从开盘到收盘可能也就1-2GB,对于这个大小,我们完全有能力放到内存中,进行各种各样的计算。
R语言可以很好的满足数据计算,建模,分析等的所有技术的部分。利用你的擅长,找到市场的机会,然后去实盘交易赚到钱,我们就完成了整个的交易过程。
本次分享并没有介绍,如何用R语言真正的去实现一个交易策略,你感兴趣通过下面的列表找到对应的文章。
张丹:
二条均线打天下(http://blog.fens.me/finance-stock-ma/)
均值回归,逆市中的投资机会(http://blog.fens.me/finance-mean-reversion/)
R语言构建追涨杀跌量化交易模型(http://blog.fens.me/finance-chase-sell/)
R语言构建配对交易量化模型(http://blog.fens.me/finance-pairs-trading/)
张丹:
2015年我在创业,希望能推动R语言在金融量化领域的发展,但是由于种种原因项目没有持续发展。接下来,我还会以个人的方式继续努力,继续推动R在金融领域的发展。
R对我们的影响和改变是非常大的,我认识R是非常好的一门语言,我会把推动R的发展,当成一项事业来做。希望也能和各位业界朋友,一起努力,把这份事业做下去。
谢谢大家
咖啡@天善智能:
好的,感谢丹哥给我们带来的精彩分享,“R语言,为量化而生”!老师给大家讲解了如何用R语言实现量化策略建模,大家理解了吗,赚钱的机会来了,回去快实践下吧!丹哥的社区专栏:https://ask.hellobi.com/blog/fensme以后也会继续更新更多文章的。现在有什么问题赶紧跟丹哥提,现场解决疑问的时间到了!
自由讨论
1、替新手问一个,请教一下,R语言的数据分析应该从哪方面入手练习啊?因为目前工作上不是用R的,看完书之后想具体去试一下。
张丹: R其实上手很快,找一本书,认真操作练习一遍就上手了。
2、玉琴:不建议用for loop的原因是考虑到性能问题吗
张丹:for loop是调用的R的循环库,apply是调用C的循环库,性能差距还是很大的
3、来自20群的提问:提个问题,微软对R的收购会对R语言的发展产生什么影响?
张丹:我觉得这是正向发展的,是好事情。大公司看到了R的潜力!
4、尚林栋:R语言金融建模的具体步骤能说一下吗
金融建模的具体步骤,你可以参考这篇文章,http://blog.fens.me/finance-stock-ma/
5、刘嘉丰Alan:丹哥,现在有很多量化平台,提供打包好的函数,在线回测,和自己造轮子拿R语言相比,您觉得各有什么优势呢?
张丹:R的优势,就是在数学计算,数据处理上。但另外,我们从开发或使用的角度,更多的用到的R包,都是rstudio公司的产品,我觉得是rstudio在推动R的整个的进化过程。
6、我也觉得r语言不错,但经常想不到商业场景,到现在,我只是用它统计考勤,各种绩效kpi,每月算一次奖金,已经这样过去2年了,r语言,路在何方哪?
张丹: 你所说的统计,只能说简单计数。比如,你要预测下个月的考勤情况,从而设计预算。你可能就需要做个,回归分析,这时R就能给你很大的帮助了。
7、Allen:r在拟合上感觉比python用起来更爽一些,其返回的结果较多
张丹:那么R和python比,R更面向数据,特别是对于没有编程基础的人。PYTHON,还是程序语言,还要了解程序结构,程序架构,代码量不会少。
有IT背景程序员,可能更倾向于PYTHON;如果没有IT背景,R更容易上手。
8、越中女儿:请教一个问题:quantmod对美股的实时接口很好用,对A股不支持,且A股基本面数据才更新到2013.09,请问有好用的ETL包么,类似于python的tushare那样对A股友好的,各种etl啊清洗的脏活累活感觉python更好啊,R就是安安静静做做统计,玩玩图形。
张丹:
quantmod使用的是yahoo等国外的数据源,这些数据源本身没有A股数据,如果需要A股数据,用tushare还是不错的。 R特有的data.frame,matrix 等类型和操作方法,在python也需要单独去实现。
9、柠檬味的香草:最近想研究一些互联网文本数据与指数或各股走势的关系,但是在使用R语言处理文本数据不是很方便,丹哥可有一些强大的library推荐,对于非结构,文本数据的处理。
张丹:
“尽量使用向量计算或矩阵计算的计算方法",可以这样理解,对于一个二维结构,for需要2次,0(N^2)的时间复杂度。如果我们把数据,直接就按矩阵存储, 你让矩阵里的每个点都加1, 只需要算一次。Hadley提供的包,源代码我都看过,写很棒,也很实用。
r在拟合上感觉比python用起来更爽一些,其返回的结果较多
其实R有很多的第三方的包,已经有了大量的算法包,而其他语言相对较少。只是我们平时接触的不多,所以觉得用不到。R有大量的统计包,你可以从官方网站找到,输出的结果,大部分也都是统计的结果。
R所支持的行业领域,非常广泛。而工程的语言,不会做细粒度的区分,只是通用的解决方法。
10、郑州—金融数据:python有pandas.DataFrame,pandas应该是第三方的数据库结构吧?R的data.frame是内置的。
张丹:
pandas.DataFrame,在底层处理,还需要对原PYTHON的数据结构做映射。当然他可以解决的很好,但你看到的内存结构,可能并不是真正的内存结构。
R内置数据类型,就可以理解是内存结构。不需要再考虑转换了。找一个自己熟悉的语言,大多数的功能,每种语言都是能实现。只有很细的领域,才会进一步区分。
11、RHaoop采用分布式并行计算,那请问如何解决需要嵌套循环的算法。
张丹:对于基于hadoop大数据的MR计算,建议做数学变成,通过数学的角度处理。我写过2个例子,一个是pagerank, 一个是itemcf。
12、@柠檬味的香草:想听听丹哥对传统数据挖掘转量化投资的建议。比如前景?竞争力?
张丹:量化投资,其实是IT人都想转的行业。你写的代码,不是通过工资来赚钱,而直接通过交易赚钱。代码的效用是最大化的。这个行业竞争很大,聪明人都在这里,要么你的技术牛,要么你了解市场,要么的算法是独特的,不然也很难。
JhT:
做量化交易和策略的都是高智商的
越中女儿:
我觉得量化对金融市场的理解比对技术本身更重要,R的需求,应该会很快凸显出来。因为数据基础都有了,后面就是差会分析的人了。通常懂数据分析的程序员,比纯程序员待遇高。
13、老师,有好的spark或者hadoop入门的书吗,计算机能力弱和java不懂啊
张丹:hadoop有很多书了,我当初看的是 权威指南。
14、@Mia.W 学RHadoop需要对Hadoop或Mapreduce了解到什么程度,需要从头学hadoop或java吗
张丹:hadoop的MR的原理要了解,找到懂JAVA的同事,帮你把环境搭好。
15、@JhT 我是刚进来的,R的优势是什么?
张丹:R是免费开源的,有6000多个包,遍布各行各业。R语言的3个特性,数学计算,数据建模,可视化。
16、@郑州—金融数据个人感觉商业上matlab比R和python支持度都要好,不管是分析,统计,挖掘还是量化方便,收费的毕竟是收费的
张丹:有商业推动,当然要比,免费的好了。不如,matlab也要打通和R的接口,毕竟开源包,比一家公司提供的包,要多很多的。
17、@越中女儿 有用R做过实盘风控么
张丹:有做,其实不太复杂。你把需要的实时数据,都同步存到redis中,用R在秒级调reids取数据,计算完成再写回去。
18、@Jason.k计算机8g内存,数据虽然行数不多,但是很多列,所以数据csv格式大小会高达几个G,这个规模数据量,内存应该是不够的。
张丹:R的机制,会把数据一次性加载到内存中。就算能读到内存,每次计算时,也会有中间变量,所以你的基础内存是不够的。而且对于win性能会更差。
下期预告:
2016年07月08日晚8点半微信直播交流大数据职位,数据场技能交流会第23场https://www.hellobi.com/event/69
今天的微信直播活动到这里就结束了,喜欢天善智能的朋友们请继续关注我们,每周五晚8:30,我们不见不散哦!
每周 Friday BI Fly 微信直播参加方式,加个人微信:fridaybifly,并发送微信:公司+行业+姓名,即可参加天善智能微信直播活动。