数据分析
时间:2021-05-27 10:00:00
单位:南理工理学院
概述
- 数据分析包括的可供拓展的领域
- 分类
- 数据对象划分为不同的部分和类型,再进一步分析,能够进一步挖掘事物的本质
- 回归
- 通过规定因变量和自变量来确定变量之间的因果关系,建立回归模型,并根据实测数据来求解模型的各参数,然后评价回归模型是否能够很好的拟合实测数据,如果能够很好的拟合,则可以根据自变量作进一步预测
- 聚类
- 根据数据的内在性质将数据分成一些聚合类,每一聚合类中的元素尽可能具有相同的特性,不同聚合类之间的特性差别尽可能大的一种分类方式,其与分类分析不同,所划分的类是未知的,因此,聚类分析也称为无指导或无监督的学习
- 匹配
- 匹配是通过一定的方法,来计算两个数据的相似程度,相似程度通常会用一个是百分比来衡量,相似匹配算法被用在很多不同的计算场景,如数据清洗、用户输入纠错、推荐统计、剽窃检测系统、自动评分系统、网页搜索和DNA序列匹配等领域
- 频繁项集
- 指事例中频繁出现的项的集合,如啤酒和尿不湿,Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集,目前已被广泛的应用在商业、网络安全等领域
- 统计
- 根据数据的特点,用一定的统计指标和指标体系,表明数据所反馈的信息,是对数据分析的基础处理工作,利用大量的历史样本来预测整个事件总体未来的走向,主要方法包括:平均指标和变异指标的计算、资料分布形态的图形表现等
- 预测
- 预测数据之间本应存有的关系的一种方法,链接预测可分为基于节点属性的预测和基于网络结构的预测,基于节点之间属性的链接预测包括分析节点资审的属性和节点之间属性的关系等信息,利用节点信息知识集和节点相似度等方法得到节点之间隐藏的关系
- 压缩
- 不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法,数据压缩分为有损压缩和无损压缩
- 因果
- 利用事物发展变化的因果关系来进行预测的方法,运用因果分析法进行市场预测,主要是采用回归分析方法,除此之外,计算经济模型和投人产出分析等方法也较为常用
- 挖掘
- 透过事件的表象发现隐藏在背后的蛛丝马迹,从而找到潜伏的规律以及看似无关事物之间背后的联系,用此来洞察未来
- 其他数论分析方法:https://zhuanlan.zhihu.com/p/344495827
- 数据分析博客指南:https://github.com/ujjwalkarn/DataSciencePython
- 分类
时序预测(time series / evaluate / prediction / forecast)
- 概念
- 通过序列数据(或称为随机数据序列)来揭示系统动态结构发展演变规律的一种统计方法,即通过利用随机过程理论和数理统计学相结合的方法,来达到研究随机数据序列所服从的统计分布规律的目的,进而用于解决实际问题(如经济、农业、信号处理等领域)。
- 根据系统监测到的某段时期内的有序序列数据(或称为监测到的历史数据),建立能够准确地反应时间序列中所包含的系统演变规律的数学模型,来评价事物的现状和估计事物的未来变化。
- 适用时序进行分析的场景的特点
- 序列中的数据点位置很大程度上由时间先后顺序决定,但不完全依赖时间变化来得到。
- 由于时序中不同时刻点的取值具有一定的随机性,因此不可能完全准确的通过历史观测值预测。
- 相距间隔较近的不同时刻的时序数值具有很强的关联性,正是这种相关性能够准确的反应系统演变规律。
- 时序数值在随时间变化过程中,往往表现出某种周期性或者趋势性的变化特征。
- 方法
- 自回归模型—AR 模型
- 移动平均模型—MA 模型
- 自回归移动平均模型—ARMA 模型
- 差分整合移动平均自回归模型—ARIMA 模型
- 季节性差分自回归滑动平均模型—SARIMA 模型
- Facebook的Prophet
- https://github.com/facebook/prophet
- 可通过conda进行安装,pip安装很麻烦
- 经典算法,具有季节性预测功能,也是时序预测推荐的常用算法,常用于对比实验
- 兼容scikit-learn的sktime
- https://github.com/alan-turing-institute/sktime
- 可通过pip直接安装
- scikit增强库,可用于时序预测,也提供其他集成算法,文档中说明了ARIMA和Prophet这种也是提供的
- 可用于中间工具库计算,将整个预测过程分步给出,提供科学计算,也可用于对照实验
- 基于tensorflow的LSTM
- https://github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction
- 源码运行
- 经典LSTM,用于预测的循环神经网络,基于tensorflow,也是时序预测中用于对比的经典算法
- 概率时间序列建模GluonTS
- https://github.com/awslabs/gluon-ts
- 提供pip安装,可能有版本的影响
- 概率时间预测,可以预测时序范围内的概率,有论文理论支持,但其他方法也能提供类似功能
- 微软的工具包Forecasting
- https://github.com/microsoft/forecasting
- 提供了jupyter的测试用例
- 包括的算法有:Auto ARIMA、Linear Regression、LightGBM(常用算法之一,树模型)、DilatedCNN,机器学习与深度学习兼顾,算法集合体,可用于对比实验
- 这个库改了很多,基本停止维护了,不推荐使用
- 时间序列工具包tslearn(包括其他功能)
- https://github.com/tslearn-team/tslearn
- 可通过pip直接安装
- 用于时序预测的机器学习工具包,除此之外,可以用于分类、比较预测的指标等
- 使用的模型包括:KNN Regressor、TimeSeriesSVR、MLP具有代表性的机器学习算法,可用于对比实验
- 基于pytorch的预测工具包pytorch-forecasting
- https://github.com/jdb78/pytorch-forecasting
- 可通过pip直接安装
- 如果需要使用深度学习,建议采用pytorch而非tensorflow,前者更加符合python的开发习惯,开发方便
- 工具包提供:RecurrentNetwork、DecoderMLP、NBeats(支持多维数据输入)、DeepAR、TemporalFusionTransformer这样的五个模型,源码中也涉及到LSTM相关类的用法
- 较为全面的综合了深度学习中的相关模型,可用于对比实验
- vectorbt回测库
- https://github.com/polakowo/vectorbt
- 可通过pip直接安装
- 优化了数据处理结构,速度较快,无其他优势
- 时序预测工具包ts
- https://github.com/johannfaouzi/pyts
- 可通过pip直接安装
- 也是科学计算的集成工具,很原始的预测库,辅助使用,深挖没太大价值
- 树模型XGBoost,LightGBM,CatBoost
- https://github.com/ClimbsRocks/auto_ml
- 可通过pip直接安装
- 引入只是为了介绍XGBoost与LightGBM机器学习模型,这两个是经典模型,预测中经常被提起,可作为对照实验
- 这个库已经停止维护,可用于辅助计算与结果计算
- 深度学习中的其他卷积神经网络的工具
- https://github.com/LongxingTan/Time-series-prediction
- 通过源码运行
- 提供的方法包括: rnn, seq2seq, cnn, wavenet, transformer, unet, n-beats,几乎涉及到全部的nn操作,但是源码稍显单薄,可用于测试,效果不错后在进行优化改进
- 通过深度学习改进的prophet:neural_prophet
- https://github.com/ourownstory/neural_prophet
- 可通过pip直接安装,基于pytorch
- prophet的深度学习版本,效果有所提升,值得一试
- 深度学习informer2020
- https://github.com/zhouhaoyi/Informer2020
- 通过源码运行,基于pytorch
- 推荐,支持多维数据
- 当前最新的基于深度学习,注意力机制的时序预测代码,在数据量很大的情况下,效果好于上面的其他方法
时序预测评价指标
- 动态时间规整相似性度量(DTW)
- 由tslearn的tslearn.metrics.dtw进行调用
- 全局对齐内核(GAK)
- 由tslearn的tslearn.metrics.gak进行调用
- 时间序列重心(DBA)
- 由tslearn的tslearn.barycenters进行调用
- 时间序列计算矩阵分布图
- 由tslearn的tslearn.matrix_profile进行调用
- PICP (PI coverage probability)
- 用于预测区间,真实值落在预测区间上下界的比率
- PINAW / NMPIW (PI normalized averaged width)
- 用于预测区间,定义衡量狭窄程度
- CWC / CLC (coverage width-based criterion)
- 用于预测区间,定义衡量覆盖程度与狭窄程度
- AIS (average interval score)
- 用于预测区间,综合考虑覆盖率与区间宽度
- MPICD (mean PI centre deviation)
- 用于预测区间,落点质量参数
- 平均绝对百分比误差(MAPE)
- 平均平方误差(MSE)
- 均方根误差(RMSE),MSE与RMSE的区别仅在于对量纲是否敏感
- 平均绝对误差(MAE),MAE反应的就是真实误差
- 线性回归 R Squared
- 深度学习指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、AUC值、F1-Score
数据分析(data / model)
- 因子与各类成分分析prince
- https://github.com/MaxHalford/prince
- 可以使用pip直接安装
- 包括的分析方法:PCA(主成分分析,常用算法), CA, MCA, MFA, FAMD
- 机器学习算法集合:numpy-ml
- https://github.com/ddbourgin/numpy-ml
- 源码使用
- 提供大量的机器学习算法,例如决策树,线性模型等,可以用于辅助计算
- 易用的机器学习ml算法集合
- https://github.com/eriklindernoren/ML-From-Scratch
- 可通过pip直接安装
- 提供了诸如遗传算法、强化学习、无监督学习等大量有质量的机器学习算法,可以通过此包做出很具有现实意义的描述效果,效果可视化做的很好,推荐优先使用
- 微软自动机器学习包:AutoML
- https://github.com/microsoft/nni
- 可通过pip直接安装
- 提供了大量的算法,优势体现在自动模型构建,自动特征选择,自动超参数优化等上,使用前需要对机器学习算法有了解,所有推荐最后使用
- 数据统计模型,用于数据统计分析
- https://github.com/statsmodels/statsmodels
- 可通过pip直接安装
- 提供了大量的统计算法,离散模型等,对时间序列算法也有提供,例如常规的算法AIRMA,Holt-Winters,HMM等,推荐优先使用
- 基于贝叶斯统计和概率机器学习建模,概率编程
- https://github.com/pymc-devs/pymc3
- 可通过pip直接安装
- 提供一些专业算法,可将算法作为工具实现,例如补全数据功能,具体使用可以通过文档进行拓展
- 微软的因果推断工具库,由原因推断出结果
- https://github.com/microsoft/dowhy
- 可通过pip直接安装
- 提供一些推断算法,属于二次开发类,效果还可以,可以作为工具使用,也可以作为对比实验使用
- 比较中庸的机器学习算法集合
- https://github.com/nidhaloff/igel
- 可以通过pip直接安装
- 提供了大量的算法,有上面算法集合的优点,也有上面集合算法的缺点,可作为工具使用
数据插补与降维
- 对于缺失的时序数据一般做法
- 基于统计学的填充方法:前向填充、线性插值、均值填充,中值填充,常用值填充(忽略了数据的时序信息)
- 直接删除法
- 基于机器学习的填充方法:KNN(K-Nearest Neighbor),RNN(Recurrent Neural Networks) ,EM(Expectation-Maximization)、矩阵分解(Matrix Factorization)等
- 对于特定框架模型的数据补充做法
- 补0(例如深度学习,补0削弱缺失项的影响)
- 专门插补数据的处理工具包
- https://github.com/xinychen/transdim
- 源码运行,翻译理论运行
- 总结了大量的数据插补方法,通过数据插补实验进行比较与相关理论依据支持
- 数据经典降维算法集合
- https://github.com/heucoder/dimensionality_reduction_alo_codes
- 方法链接,提供理论支持
- 数据降维经典算法的集合,将经典的算法进行整理,对数据降维提供帮助,经典算法:PCA,LDA,MDS,LLE,TSNE
数据异常检测(detection)
- 集成工具包pyod,提供多种方法进行数据的异常分析
- https://github.com/yzhao062/pyod
- 可以使用pip直接安装
- 提供了丰富的方法进行数据异常检测,可以使用此方法对异常数据进行清洗,也可以对数据进行监控预警等操作
- 里面算法的论文理论依据提供于:https://github.com/yzhao062/anomaly-detection-resources
- 实验结果来看,没有一个模型持续表现效果良好,但是可以依赖深度学习进行深层次训练,完善效果
- 基于RNN的时序异常检测方法
- https://github.com/chickenbestlover/RNN-Time-series-Anomaly-Detection
- 源码运行
- 通过拟合时序分析值,对异常数据进行检测,基于pytorch,可用于检测或者预测
- 基于规则的时序异常检测工具包
- https://github.com/arundo/adtk
- 可通过pip直接安装
- 通用检测器,提供了文档与用例,可以用作对比实验
数据可视化(visualization)
- 直接连接数据库,通过网站进行面板可视化
- https://github.com/apache/superset
- 可以通过docker直接构建,支持数据库形式丰富
- 阿帕奇的开源软件,通过数据库可视化数据,使用方便,功能丰富,通过网站直接进行使用,推荐
- 直接连接数据库,和上面的功能差不多
- https://github.com/getredash/redash
- 源码构建,使用
- 没上面的美观,但支持的数据库更多了,同时不支持docker,构建可能比较麻烦
- 安装方便的web交互可视化工具
- https://github.com/bokeh/bokeh
- 可通过pip直接安装
- 优势是可以在浏览器上进行展示,可以通过代码构建图表,相对比较中庸
- 数据可视化工具包,类似于matplotlib
- https://github.com/mwaskom/seaborn
- 可通过pip直接安装
- 美观作图,用起来更加方便,属于matplotlib的增强版,推荐
- 基于js可以做出非常美观的动态图表echarts
- https://echarts.apache.org/examples/zh/index.html
- 可以直接编辑网页模板
- 输入数据就可以做出非常美观的动态图表,使用方便直接修正模板即可,更好的是,python提供了echarts库,可以通过pip安装后使用代码编辑图表,使用方便,生成的图表可以嵌入到网页中,非常具有实用价值,推荐
- 多维数据可视化
- https://github.com/ContextLab/hypertools
- 可通过pip直接安装
- 可将多维数据映射到空间,对数据做一个立体的可视化展示
金融数据
- 开源数据采集
- https://github.com/waditu/tushare (提供免费接口,数据全面,可以直接调用)
- https://github.com/jindaxiang/akshare(提供免费接口,包含的数据类别多)
- https://github.com/ranaroussi/yfinance(从雅虎抓取金融数据)
汇总
-
时序数据预测分析方法(经典)
- 传统方法:AR,MA,ARMA,ARIMA,Prophet,Tree-Based(LGB,XGB,CatBoost,AdaBoost,RF,ET),…
- 深度学习:RNN(LSTM,GRU),Seq2Seq+Attention,DeepAR,ES-RNN,CNN,WaveNet,Transformer,…
-
机器学习算法汇总
- scikit-learn中文文档地址
- https://www.scikitlearn.com.cn/
- 监督学习
- 广义线性模型、线性和二次判别分析、内核岭回归、支持向量机、随机梯度下降、最邻近、高斯过程、交叉分解、朴素贝叶斯、决策树、集成方法、特征选择、半监督学习、等式回归、概率校准、神经网络模型
- 无监督学习
- 高斯混合模型、流形学习、聚类、双聚类、矩阵分解问题、协方差估计、新奇点和离群点检测、密度估计、神经网络模型
- scikit-learn中文文档地址