taoCMS-基于php+sqlite最小巧的CMS http://www.taocms.org/ taoCMS是基于php+sqlite/mysql的国内最小(100Kb左右)的功能完善的CMS管理系统 2017-11-24 taoCMS-基于php+sqlite最小巧的CMS 1104 Centos6安装ocserv/openconnect/cisco AnyConnect vpn Centos7使用epel源可直接使用Yum安装。
安装编译环境及依赖,如部分软件不能安装请先安装epel源。

1
2
yum install pam-devel readline-devel http-parser-devel unbound gmp-devel
yum install tar gzip xz wget gcc make autoconf

ocserv编译安装依赖,ocserv需要gnutls3版本以上,gnutls依赖nettle2.7.1:

1
2
3
4
5
6
7
wget ftp://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz
tar zxvf nettle-2.7.1.tar.gz
cd nettle-2.7.1/
./configure --prefix=/usr/local/nettle
make && make install
echo '/usr/local/nettle/lib64/' > /etc/ld.so.conf.d/nettle.conf
ldconfig

安装gnutls3.3.9:

1
2
3
4
5
6
7
8
9
10
11
12
export NETTLE_CFLAGS="-I/usr/local/nettle/include/"
export NETTLE_LIBS="-L/usr/local/nettle/lib64/ -lnettle"
export HOGWEED_LIBS="-L/usr/local/nettle/lib64/ -lhogweed"
export HOGWEED_CFLAGS="-I/usr/local/nettle/include"
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.9.tar.xz
tar xvf gnutls-3.3.9.tar.xz
cd gnutls-3.3.9/
./configure --prefix=/usr/local/gnutls
make && make install
ln -s /usr/local/gnutls/bin/certtool /usr/bin/certtool
echo '/usr/local/gnutls/lib/' > /etc/ld.so.conf.d/gnutls.conf
ldconfig

安装libnl:

1
2
3
4
5
6
7
8
yum install bison flex
wget http://www.carisma.slowglass.com/~tgr/libnl/files/libnl-3.2.24.tar.gz
tar xvf libnl-3.2.24.tar.gz
cd libnl-3.2.24
./configure --prefix=/usr/local/libnl
make && make install
echo '/usr/local/libnl/lib/' > /etc/ld.so.conf.d/libnl.conf
ldconfig

安装ocserv:

yum install libnl-devel.i686

yum install libnl3-devel libnl3

1
2
3
4
5
6
7
8
9
10
11
export LIBNL3_CFLAGS="-I/usr/local/libnl/include/libnl3"
export LIBNL3_LIBS="-L//usr/local/libnl/lib/ -lnl-3 -lnl-route-3"
export LIBGNUTLS_LIBS="-L/usr/local/gnutls/lib/ -lgnutls"
export LIBGNUTLS_CFLAGS="-I/usr/local/gnutls/include/"
wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.9.0.1.tar.xz
tar xvf ocserv-0.9.0.1.tar.xz
cd ocserv-0.9.0
./configure --prefix=/usr/local/ocserv
make && make install
echo 'export PATH=$PATH://usr/local/ocserv/sbin/:/usr/local/ocserv/bin/' >> $HOME/.bashrc
source $HOME/.bashrc

生成SSL证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mkdir /etc/ocserv/
cd /etc/ocserv
#CA私钥:
certtool --generate-privkey --outfile ca-key.pem
#CA模板:
cat << EOF > ca.tmpl
cn = "www.haiyun.me"
organization = "www.haiyun.me"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
EOF
#CA证书:
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
 
#Server私钥:
certtool --generate-privkey --outfile server-key.pem
#Server证书模板:
cat << EOF > server.tmpl
cn = "www.haiyun.me"
o = "www.haiyun.me"
expiration_days = 3650
signing_key
encryption_key
tls_www_server
EOF
 
#Server证书:
certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem

密码登录,生成密码文件:

1
ocpasswd -c /etc/ocserv/passwd username

证书登录:

1
2
3
4
5
6
7
8
9
10
11
12
#user私钥
certtool --generate-privkey --outfile user-key.pem
#user模板
cat << EOF > user.tmpl
cn = "some random name"
unit = "some random unit"
expiration_days = 365
signing_key
tls_www_client
EOF
#user证书
certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
auth = "plain[/etc/ocserv/passwd]"
#证书认证
#auth = "certificate"
ca-cert /etc/ocserv/ca-cert.pem
max-clients = 16
max-same-clients = 2
tcp-port = 5551
udp-port = 5551
keepalive = 32400
try-mtu-discovery = true
cisco-client-compat = true
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
auth-timeout = 40
pid-file = /var/run/ocserv.pid
socket-file = /var/run/ocserv-socket
run-as-user = nobody
run-as-group = daemon
device = vpns
ipv4-network = 192.168.1.0
ipv4-netmask = 255.255.255.0
route = 192.168.1.0/255.255.255.0

启动opserv:

1
ocserv -f -c /etc/ocserv/ocserv.conf

IP转发及SNAT:

1
2
3
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "echo 1 > /proc/sys/net/ipv4/ip_forward " >> /etc/rc.local
iptables -t nat -A POSTROUTING  -o eth0 -j MASQUERADE

使用用户密码连接:

1
echo passwd|openconnect -u username www.haiyun.me:5551 --no-cert-check

使用证书连接:

1
openconnect -k user-key.pem -c user-cert.pem www.haiyun.me:5551 --no-cert-check
]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-11-23 23:11:36
1103 kibana查询语法 单项term查询

搜 Dahlen Malone

字段field查询

field:value   例:city:Keyport age:26

通配符

匹配单个字符      例: H?bbs

* 匹配0到多个字符           例: H*

注意: ? * 不能用作第一个字符,例如: ?text    *text

范围查询

age:[20 TO 30]        age:{20 TO 30}

注:[ ] 表示端点数值包含在范围内,{ } 表示端点数值不包含在范围内


逻辑操作

AND     OR       例子:firstname:H* AND age:20          firstname:H* OR age:20

+ :搜索结果中必须包含此项

:不能含有此项

例: +firstname:H* -age:20 city:H*    firstname字段结果中必须存在H开头的不能有年龄是20city字段H开头的可有可无

分组

(firstname:H* OR age:20) AND state:KS      先查询名字H开头年龄或者是20的结果,然后再与国家是KS的结合

字段分组

firstname:(+H* -He*)        搜索firstname字段里H开头的结果,并且排除firstnameHe开头的结果

转义特殊字符

+ - && || ! () {} [] ^" ~ * ? :

注意:以上字符当作值搜索的时候需要用  转义

]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-10-10 23:10:05
1102 有效性指标中的区分能力指标 作者:穿靴子的猫
链接:https://www.zhihu.com/question/37405102/answer/106668941
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

KS(Kolmogorov-Smirnov):KS用于模型风险区分能力进行评估,指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。

KS的计算步骤如下:

1. 计算每个评分区间的好坏账户数。

2. 计算每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。

3. 计算每个评分区间累计坏账户占比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值即得此评分卡的K-S值。


·GINI系数:也是用于模型风险区分能力进行评估。GINI统计值衡量坏账户数在好账户数上的的累积分布与随机分布曲线之间的面积,好账户与坏账户分布之间的差异越大,GINI指标越高,表明模型的风险区分能力越强。

GINI系数的计算步骤如下:

1. 计算每个评分区间的好坏账户数。

2. 计算每个评分区间的累计好账户数占总好账户数比率(累计good%)和累计坏账户数占总坏账户数比率(累计bad%)。

3. 按照累计好账户占比和累计坏账户占比得出下图所示曲线ADC。

4. 计算出图中阴影部分面积,阴影面积占直角三角形ABC面积的百分比,即为GINI系数。



以下是原文

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

楼主范围太广。不同的行业有不同的风控目标,不同的风控过程和程度,也有不同的风控结果。其次同一行业风险也分多种风险,对不同的风险(信用风险,操作风险,市场风险)也有不同的应对办法以及模型建设。



只讲一讲中国金融行业中的银行的信用风控与大数据的渊源。



1,风控意义与大数据建模分析优点:中国的金融行业必定在金融全球化的洗礼下一步步找到更大市场,相比中国制造业有成长更快的趋势。而此刻,风控就显得尤为重要。都知道收益越大风险越大,当然而我们更想的如果是在中间找到一个平衡点让收益大的情况下拥有尽可能小的风险。而大数据建模就可以尽可能实现这点:提高审批效率,降低人工成本,减少因非客观判断原因造成的失误的风险。



2,大数据建模目标。第一点目标做信贷工厂的量化建设:清洗银行历史数据用于数据建模形成评分卡,再与规则结合对贷款生命周期三个阶段(申请贷后催收)的好坏客户提供决策建议的预测框架(自动通过,人工审核,审慎审核,还是建议拒绝)。第二点目标内评合规:背景是巴塞尔协议:衡量银行的资本充足率和资本准备是符合巴塞尔协议的规定,如果不符合应该采取什么样的措施。



3,关于建模:前:建模的变量以及数据都是通过层层原始分析,挖掘分析,变量分组,变量降维,过度拟合VIF检测,以及业务逻辑选择出来的。中:而模型的建设本来有方差分析,相关性分析,逻辑回归,决策树,神经网络分析这几种。但是由于Y变量都一般为非线性所以基本都用LOGISTIC逻辑回归。后:模型建好后还需要用PSI检验模型客群的稳定性,用KS或者GINI函数检验模型的区分能力。(公式我就不给啦~感兴趣的孩子肯定有自己学习的方式)如果不太理想就再改进,这是一个做循环的闭环式过程直到选到最佳的。(PS:建模工具:SAS,由于可以处理相当庞大的数据且在美国极其权威的认证而著称的。别的我就不评价了嘿)



4,好的信用风控的评估效果一主要从准确性,稳定性,可解释性三个方面来评估模型。其中准确性指标包括感受性曲线下面积(ROC_AUC)和区分度指标(Kolmogorov-Smirnov,KS),稳定性指标主要参考群体稳定指数(Population Shift Index,PSI)。可解释性可通过指标重要度来进行评估,其中指标重要度用于衡量各个解释变量对算法预测结果影响的程度。注意:一定要将大数据建模与业务逻辑紧密联系!

分割线----------------------------------------------------------当然,个人觉得知道模型背后的理论也是非常有必要的。让我们顺着逻辑回归来讲。一首先是假设检验中假设建立。什么是假设检验呢,假设检验背后的原理是什么呢,我们模型中具体的假设是什么呢。

假设检验分为原假设H和备择假设H0,我们后面会推翻H来证明我们的H0是正确的。

假设检验的原理也就是我们要推翻的这个H的理由是:小概率事件不可能发生。(在此我举一个经典的例子)

在模型中我们的假设便是我们逻辑回归的因变量和自变量之间没有线性关系。

也就是这里面的beta们都是0。

二,never say yes.在原假设正确的前提下,确定检验统计数并计算出统计数的估计值(即构造统计量并计算统计量的估计值)

一般我们会把统计量构造成符合正态分布、卡方分布、F分布的情况,由构造的统计量不同可分为u检验、卡方检验、F检验等。

这里我们以卡方分布统计量为例子:

在各种假设情形下,实际频数与理论频数偏离的总和即为卡方值,它近似服从卡方为V的卡方分布,因此可以用卡方分布的理论来进行假设检验。



三、计算P值,或确定临界值,并比较临界值与统计数值的大小,根据”小概率事件在一次实验中几乎是不可能发生的原理“得出结论统计结果分析

显著性水平:这里的显著是一个统计学的概念,是指原假设发生是一个小概率事件,统计学上用来确定或否定原假设为小概率事件的概率标准叫做显著性水平。原假设发生的概率如果小于或等于5%,一般认为认为是小概率事件,这也是统计学上达到了”显著“,这时的显著性水平为5%。

拒绝域:当由样本计算的统计量落入该区域内则拒绝原假设,接受备择假设,拒绝域的边界称为临界值。当原假设正确时,它被拒绝的概率不得超过给定的显著性水平a(阿尔法),阿尔法通常取值为0.05,0.01,因此落在拒绝域内是一个小概率事件。

还是以卡方检验为例

以下是卡方分布的密度函数,X轴是卡方值,Y轴是发生的P概率。

换句简单易懂的话就是,我们计算实际频数与理论频数的偏离程度即卡方值非常大的情况下概率是非常小的是不会发生的,当X2卡方值远远大于3.84,相应的我们X轴远方对应的就是越来越小的P概率。那么也就是说我们的假设是不成立的,也就是说因变量和自变量之间他们是相关的。并且在原假设情况下卡方值越大也就代表越不可能不相关,也就是越可能相关。

当然在确定检验我们单个系数的时候会用来卡方检验,整个模型的检验的时候就会用到我们F检验,T检验,他们都和我们的卡方有一定的联系。


https://www.zhihu.com/question/37405102

]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-10-02 00:10:51
1101 Bagging和Boosting 概念及区别  Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。

首先介绍Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。

1、Bagging (bootstrap aggregating)

Bagging即套袋法,其算法过程如下:

A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

 

2、Boosting

其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。

关于Boosting的两个核心问题:

1)在每一轮如何改变训练数据的权值或概率分布?

通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

2)通过什么方式来组合弱分类器?

通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。

而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

 

3、Bagging,Boosting二者之间的区别

Bagging和Boosting的区别:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

 

4、总结

这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

1)Bagging + 决策树 = 随机森林

2)AdaBoost + 决策树 = 提升树

3)Gradient Boosting + 决策树 = GBDT

 

 

参考文献

[1] 林轩田,机器学习技法。

[2] IRLAB, http://www.cnblogs.com/guolei/archive/2013/05/21/3091301.html

[3] 百度技术,http://baidutech.blog.51cto.com/4114344/743809/

]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-09-26 12:09:29
1100 TA-Lib学习笔记-K线模式识别 写在前面

之前看过蜡烛图相关的书,虽然我不是很信这种老旧的统计模式,但是还算熟悉,尽量把talib里的模式名字翻译做中文,方便大家网上查询,并每个都做了简介。翻了下百度,大概没有比这篇更全的文档了。本来应该配上模式的K线图与检测代码的,但是脖子实在太疼,还是先缓一缓吧。

若有谬误之处,请随时指正,谢谢。

说明

x日K线模式指的是x周期K线模式,按选择的K线周期不同而不同

实体指 开盘价-收盘价的长度

上影线指 最高价-max(开盘价, 收盘价)的长度

下影线指 最低价-min(开盘价, 收盘价)的长度

向上跳空指 T日最低价大于T-1日最高价

向下跳空指 T日最高价小于T-1日最低价

K线模式识别

函数名:CDL2CROWS

名称:Two Crows 两只乌鸦

简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌。

例子:integer = CDL2CROWS(open, high, low, close)

函数名:CDL3BLACKCROWS

名称:Three Black Crows 三只乌鸦

简介:三日K线模式,连续三根阴线,每日收盘价都下跌且接近最低价,每日开盘价都在上根K线实体内,预示股价下跌。

例子:integer = CD3BLACKCROWS(open, high, low, close)

函数名:CDL3INSIDE

名称:Three Inside Up/Down 三内部上涨和下跌

简介:三日K线模式,母子信号+长K线,以三内部上涨为例,K线为阴阳阳,第三天收盘价高于第一天开盘价,第二天K线在第一天K线内部,预示着股价上涨。

例子:integer = CDL3INSIDE(open, high, low, close)

函数名:CDL3LINESTRIKE

名称:Three-Line Strike 三线打击

简介:四日K线模式,前三根阳线,每日收盘价都比前一日高,开盘价在前一日实体内,第四日市场高开,收盘价低于第一日开盘价,预示股价下跌。

例子:integer = CDL3LINESTRIKE(open, high, low, close)

函数名:CDL3OUTSIDE

名称:Three Outside Up/Down 三外部上涨和下跌

简介:三日K线模式,与三内部上涨和下跌类似,K线为阴阳阳,但第一日与第二日的K线形态相反,以三外部上涨为例,第一日K线在第二日K线内部,预示着股价上涨。

例子:integer = CDL3OUTSIDE(open, high, low, close)

函数名:CDL3STARSINSOUTH

名称:Three Stars In The South 南方三星

简介:三日K线模式,与大敌当前相反,三日K线皆阴,第一日有长下影线,第二日与第一日类似,K线整体小于第一日,第三日无下影线实体信号,成交价格都在第一日振幅之内,预示下跌趋势反转,股价上升。

例子:integer = CDL3STARSINSOUTH(open, high, low, close)

函数名:CDL3WHITESOLDIERS

名称:Three Advancing White Soldiers 三个白兵

简介:三日K线模式,三日K线皆阳,每日收盘价变高且接近最高价,开盘价在前一日实体上半部,预示股价上升。

例子:integer = CDL3WHITESOLDIERS(open, high, low, close)

函数名:CDLABANDONEDBABY

名称:Abandoned Baby 弃婴

简介:三日K线模式,第二日价格跳空且收十字星(开盘价与收盘价接近,最高价最低价相差不大),预示趋势反转,发生在顶部下跌,底部上涨。

例子:integer = CDLABANDONEDBABY(open, high, low, close, penetration=0)

函数名:CDLADVANCEBLOCK

名称:Advance Block 大敌当前

简介:三日K线模式,三日都收阳,每日收盘价都比前一日高,开盘价都在前一日实体以内,实体变短,上影线变长。

例子:integer = CDLADVANCEBLOCK(open, high, low, close)

函数名:CDLBELTHOLD

名称:Belt-hold 捉腰带线

简介:两日K线模式,下跌趋势中,第一日阴线,第二日开盘价为最低价,阳线,收盘价接近最高价,预示价格上涨。

例子:integer = CDLBELTHOLD(open, high, low, close)

函数名:CDLBREAKAWAY

名称:Breakaway 脱离

简介:五日K线模式,以看涨脱离为例,下跌趋势中,第一日长阴线,第二日跳空阴线,延续趋势开始震荡,第五日长阳线,收盘价在第一天收盘价与第二天开盘价之间,预示价格上涨。

例子:integer = CDLBREAKAWAY(open, high, low, close)

函数名:CDLCLOSINGMARUBOZU

名称:Closing Marubozu 收盘缺影线

简介:一日K线模式,以阳线为例,最低价低于开盘价,收盘价等于最高价,预示着趋势持续。

例子:integer = CDLCLOSINGMARUBOZU(open, high, low, close)

函数名:CDLCONCEALBABYSWALL

名称: Concealing Baby Swallow 藏婴吞没

简介:四日K线模式,下跌趋势中,前两日阴线无影线,第二日开盘、收盘价皆低于第二日,第三日倒锤头,第四日开盘价高于前一日最高价,收盘价低于前一日最低价,预示着底部反转。

例子:integer = CDLCONCEALBABYSWALL(open, high, low, close)

函数名:CDLCOUNTERATTACK

名称:Counterattack 反击线

简介:二日K线模式,与分离线类似。

例子:integer = CDLCOUNTERATTACK(open, high, low, close)

函数名:CDLDARKCLOUDCOVER

名称:Dark Cloud Cover 乌云压顶

简介:二日K线模式,第一日长阳,第二日开盘价高于前一日最高价,收盘价处于前一日实体中部以下,预示着股价下跌。

例子:integer = CDLDARKCLOUDCOVER(open, high, low, close, penetration=0)

函数名:CDLDOJI

名称:Doji 十字

简介:一日K线模式,开盘价与收盘价基本相同。

例子:integer = CDLDOJI(open, high, low, close)

函数名:CDLDOJISTAR

名称:Doji Star 十字星

简介:一日K线模式,开盘价与收盘价基本相同,上下影线不会很长,预示着当前趋势反转。

例子:integer = CDLDOJISTAR(open, high, low, close)

函数名:CDLDRAGONFLYDOJI

名称:Dragonfly Doji 蜻蜓十字/T形十字

简介:一日K线模式,开盘后价格一路走低,之后收复,收盘价与开盘价相同,预示趋势反转。

例子:integer = CDLDRAGONFLYDOJI(open, high, low, close)

函数名:CDLENGULFING

名称:Engulfing Pattern 吞噬模式

简介:两日K线模式,分多头吞噬和空头吞噬,以多头吞噬为例,第一日为阴线,第二日阳线,第一日的开盘价和收盘价在第二日开盘价收盘价之内,但不能完全相同。

例子:integer = CDLENGULFING(open, high, low, close)

函数名:CDLEVENINGDOJISTAR

名称:Evening Doji Star 十字暮星

简介:三日K线模式,基本模式为暮星,第二日收盘价和开盘价相同,预示顶部反转。

例子:integer = CDLEVENINGDOJISTAR(open, high, low, close, penetration=0)

函数名:CDLEVENINGSTAR

名称:Evening Star 暮星

简介:三日K线模式,与晨星相反,上升趋势中,第一日阳线,第二日价格振幅较小,第三日阴线,预示顶部反转。

例子:integer = CDLEVENINGSTAR(open, high, low, close, penetration=0)

函数名:CDLGAPSIDESIDEWHITE

名称:Up/Down-gap side-by-side white lines 向上/下跳空并列阳线

简介:二日K线模式,上升趋势向上跳空,下跌趋势向下跳空,第一日与第二日有相同开盘价,实体长度差不多,则趋势持续。

例子:integer = CDLGAPSIDESIDEWHITE(open, high, low, close)

函数名:CDLGRAVESTONEDOJI

名称:Gravestone Doji 墓碑十字/倒T十字

简介:一日K线模式,开盘价与收盘价相同,上影线长,无下影线,预示底部反转。

例子:integer = CDLGRAVESTONEDOJI(open, high, low, close)

函数名:CDLHAMMER

名称:Hammer 锤头

简介:一日K线模式,实体较短,无上影线,下影线大于实体长度两倍,处于下跌趋势底部,预示反转。

例子:integer = CDLHAMMER(open, high, low, close)

函数名:CDLHANGINGMAN

名称:Hanging Man 上吊线

简介:一日K线模式,形状与锤子类似,处于上升趋势的顶部,预示着趋势反转。

例子:integer = CDLHANGINGMAN(open, high, low, close)

函数名:CDLHARAMI

名称:Harami Pattern 母子线

简介:二日K线模式,分多头母子与空头母子,两者相反,以多头母子为例,在下跌趋势中,第一日K线长阴,第二日开盘价收盘价在第一日价格振幅之内,为阳线,预示趋势反转,股价上升。

例子:integer = CDLHARAMI(open, high, low, close)

函数名:CDLHARAMICROSS

名称:Harami Cross Pattern 十字孕线

简介:二日K线模式,与母子县类似,若第二日K线是十字线,便称为十字孕线,预示着趋势反转。

例子:integer = CDLHARAMICROSS(open, high, low, close)

函数名:CDLHIGHWAVE

名称:High-Wave Candle 风高浪大线

简介:三日K线模式,具有极长的上/下影线与短的实体,预示着趋势反转。

例子:integer = CDLHIGHWAVE(open, high, low, close)

函数名:CDLHIKKAKE

名称:Hikkake Pattern 陷阱

简介:三日K线模式,与母子类似,第二日价格在前一日实体范围内,第三日收盘价高于前两日,反转失败,趋势继续。

例子:integer = CDLHIKKAKE(open, high, low, close)

函数名:CDLHIKKAKEMOD

名称:Modified Hikkake Pattern 修正陷阱

简介:三日K线模式,与陷阱类似,上升趋势中,第三日跳空高开;下跌趋势中,第三日跳空低开,反转失败,趋势继续。

例子:integer = CDLHIKKAKEMOD(open, high, low, close)

函数名:CDLHOMINGPIGEON

名称:Homing Pigeon 家鸽

简介:二日K线模式,与母子线类似,不同的的是二日K线颜色相同,第二日最高价、最低价都在第一日实体之内,预示着趋势反转。

例子:integer = CDLHOMINGPIGEON(open, high, low, close)

函数名:CDLIDENTICAL3CROWS

名称:Identical Three Crows 三胞胎乌鸦

简介:三日K线模式,上涨趋势中,三日都为阴线,长度大致相等,每日开盘价等于前一日收盘价,收盘价接近当日最低价,预示价格下跌。

例子:integer = CDLIDENTICAL3CROWS(open, high, low, close)

函数名:CDLINNECK

名称:In-Neck Pattern 颈内线

简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价略高于第一日收盘价,阳线,实体较短,预示着下跌继续。

例子:integer = CDLINNECK(open, high, low, close)

函数名:CDLINVERTEDHAMMER

名称:Inverted Hammer 倒锤头

简介:一日K线模式,上影线较长,长度为实体2倍以上,无下影线,在下跌趋势底部,预示着趋势反转。

例子:integer = CDLINVERTEDHAMMER(open, high, low, close)

函数名:CDLKICKING

名称:Kicking 反冲形态

简介:二日K线模式,与分离线类似,两日K线为秃线,颜色相反,存在跳空缺口。

例子:integer = CDLKICKING(open, high, low, close)

函数名:CDLKICKINGBYLENGTH

名称:Kicking - bull/bear determined by the longer marubozu 由较长缺影线决定的反冲形态

简介:二日K线模式,与反冲形态类似,较长缺影线决定价格的涨跌。

例子:integer = CDLKICKINGBYLENGTH(open, high, low, close)

函数名:CDLLADDERBOTTOM

名称:Ladder Bottom 梯底

简介:五日K线模式,下跌趋势中,前三日阴线,开盘价与收盘价皆低于前一日开盘、收盘价,第四日倒锤头,第五日开盘价高于前一日开盘价,阳线,收盘价高于前几日价格振幅,预示着底部反转。

例子:integer = CDLLADDERBOTTOM(open, high, low, close)

函数名:CDLLONGLEGGEDDOJI

名称:Long Legged Doji 长脚十字

简介:一日K线模式,开盘价与收盘价相同居当日价格中部,上下影线长,表达市场不确定性。

例子:integer = CDLLONGLEGGEDDOJI(open, high, low, close)

函数名:CDLLONGLINE

名称:Long Line Candle 长蜡烛

简介:一日K线模式,K线实体长,无上下影线。

例子:integer = CDLLONGLINE(open, high, low, close)

函数名:CDLMARUBOZU

名称:Marubozu 光头光脚/缺影线

简介:一日K线模式,上下两头都没有影线的实体,阴线预示着熊市持续或者牛市反转,阳线相反。

例子:integer = CDLMARUBOZU(open, high, low, close)

函数名:CDLMATCHINGLOW

名称:Matching Low 相同低价

简介:二日K线模式,下跌趋势中,第一日长阴线,第二日阴线,收盘价与前一日相同,预示底部确认,该价格为支撑位。

例子:integer = CDLMATCHINGLOW(open, high, low, close)

函数名:CDLMATHOLD

名称:Mat Hold 铺垫

简介:五日K线模式,上涨趋势中,第一日阳线,第二日跳空高开影线,第三、四日短实体影线,第五日阳线,收盘价高于前四日,预示趋势持续。

例子:integer = CDLMATHOLD(open, high, low, close, penetration=0)

函数名:CDLMORNINGDOJISTAR

名称:Morning Doji Star 十字晨星

简介:三日K线模式,基本模式为晨星,第二日K线为十字星,预示底部反转。

例子:integer = CDLMORNINGDOJISTAR(open, high, low, close, penetration=0)

函数名:CDLMORNINGSTAR

名称:Morning Star 晨星

简介:三日K线模式,下跌趋势,第一日阴线,第二日价格振幅较小,第三天阳线,预示底部反转。

例子:integer = CDLMORNINGSTAR(open, high, low, close, penetration=0)

函数名:CDLONNECK

名称:On-Neck Pattern 颈上线

简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价与前一日最低价相同,阳线,实体较短,预示着延续下跌趋势。

例子:integer = CDLONNECK(open, high, low, close)

函数名:CDLPIERCING

名称:Piercing Pattern 刺透形态

简介:两日K线模式,下跌趋势中,第一日阴线,第二日收盘价低于前一日最低价,收盘价处在第一日实体上部,预示着底部反转。

例子:integer = CDLPIERCING(open, high, low, close)

函数名:CDLRICKSHAWMAN

名称:Rickshaw Man 黄包车夫

简介:一日K线模式,与长腿十字线类似,若实体正好处于价格振幅中点,称为黄包车夫。

例子:integer = CDLRICKSHAWMAN(open, high, low, close)

函数名:CDLRISEFALL3METHODS

名称:Rising/Falling Three Methods 上升/下降三法

简介:五日K线模式,以上升三法为例,上涨趋势中,第一日长阳线,中间三日价格在第一日范围内小幅震荡,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。

例子:integer = CDLRISEFALL3METHODS(open, high, low, close)

函数名:CDLSEPARATINGLINES

名称:Separating Lines 分离线

简介:二日K线模式,上涨趋势中,第一日阴线,第二日阳线,第二日开盘价与第一日相同且为最低价,预示着趋势继续。

例子:integer = CDLSEPARATINGLINES(open, high, low, close)

函数名:CDLSHOOTINGSTAR

名称:Shooting Star 射击之星

简介:一日K线模式,上影线至少为实体长度两倍,没有下影线,预示着股价下跌

例子:integer = CDLSHOOTINGSTAR(open, high, low, close)

函数名:CDLSHORTLINE

名称:Short Line Candle 短蜡烛

简介:一日K线模式,实体短,无上下影线。

例子:integer = CDLSHORTLINE(open, high, low, close)

函数名:CDLSPINNINGTOP

名称:Spinning Top 纺锤

简介:一日K线,实体小。

例子:integer = CDLSPINNINGTOP(open, high, low, close)

函数名:CDLSTALLEDPATTERN

名称:Stalled Pattern 停顿形态

简介:三日K线模式,上涨趋势中,第二日长阳线,第三日开盘于前一日收盘价附近,短阳线,预示着上涨结束。

例子:integer = CDLSTALLEDPATTERN(open, high, low, close)

函数名:CDLSTICKSANDWICH

名称:Stick Sandwich 条形三明治

简介:三日K线模式,第一日长阴线,第二日阳线,开盘价高于前一日收盘价,第三日开盘价高于前两日最高价,收盘价于第一日收盘价相同。

例子:integer = CDLSTICKSANDWICH(open, high, low, close)

函数名:CDLTAKURI

名称:Takuri (Dragonfly Doji with very long lower shadow) 探水竿

简介:一日K线模式,大致与蜻蜓十字相同,下影线长度长。

例子:integer = CDLTAKURI(open, high, low, close)

函数名:CDLTASUKIGAP

名称:Tasuki Gap 跳空并列阴阳线

简介:三日K线模式,分上涨和下跌,以上升为例,前两日阳线,第二日跳空,第三日阴线,收盘价于缺口中,上升趋势持续。

例子:integer = CDLTASUKIGAP(open, high, low, close)

函数名:CDLTHRUSTING

名称:Thrusting Pattern 插入

简介:二日K线模式,与颈上线类似,下跌趋势中,第一日长阴线,第二日开盘价跳空,收盘价略低于前一日实体中部,与颈上线相比实体较长,预示着趋势持续。

例子:integer = CDLTHRUSTING(open, high, low, close)

函数名:CDLTRISTAR

名称:Tristar Pattern 三星

简介:三日K线模式,由三个十字组成,第二日十字必须高于或者低于第一日和第三日,预示着反转。

例子:integer = CDLTRISTAR(open, high, low, close)

函数名:CDLUNIQUE3RIVER

名称:Unique 3 River 奇特三河床

简介:三日K线模式,下跌趋势中,第一日长阴线,第二日为锤头,最低价创新低,第三日开盘价低于第二日收盘价,收阳线,收盘价不高于第二日收盘价,预示着反转,第二日下影线越长可能性越大。

例子:integer = CDLUNIQUE3RIVER(open, high, low, close)

函数名:CDLUPSIDEGAP2CROWS

名称:Upside Gap Two Crows 向上跳空的两只乌鸦

简介:三日K线模式,第一日阳线,第二日跳空以高于第一日最高价开盘,收阴线,第三日开盘价高于第二日,收阴线,与第一日比仍有缺口。

例子:integer = CDLUPSIDEGAP2CROWS(open, high, low, close)

函数名:CDLXSIDEGAP3METHODS

名称:Upside/Downside Gap Three Methods 上升/下降跳空三法

简介:五日K线模式,以上升跳空三法为例,上涨趋势中,第一日长阳线,第二日短阳线,第三日跳空阳线,第四日阴线,开盘价与收盘价于前两日实体内,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。

例子:integer = CDLXSIDEGAP3METHODS(open, high, low, close)

https://zhuanlan.zhihu.com/p/24883961

]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-09-24 23:09:26
1099 数据挖掘模型中的IV和WOE详解 1.IV的用途

IV的全称是Information Value,中文意思是信息价值,或者信息量。

我们在用逻辑回归、决策树等模型方法构建分类模型时,经常需要对自变量进行筛选。比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。那么我们怎么去挑选入模变量呢?

挑选入模变量过程是个比较复杂的过程,需要考虑的因素很多,比如:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(被挑战时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。

“变量的预测能力”这个说法很笼统,很主观,非量化,在筛选变量的时候我们总不能说:“我觉得这个变量预测能力很强,所以他要进入模型”吧?我们需要一些具体的量化指标来衡量每自变量的预测能力,并根据这些量化指标的大小,来确定哪些变量进入模型。IV就是这样一种指标,他可以用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。


2.对IV的直观理解


从直观逻辑上大体可以这样理解“用IV去衡量变量预测能力”这件事情:我们假设在一个分类问题中,目标变量的类别有两类:Y1,Y2。对于一个待预测的个体A,要判断A属于Y1还是Y2,我们是需要一定的信息的,假设这个信息总量是I,而这些所需要的信息,就蕴含在所有的自变量C1,C2,C3,……,Cn中,那么,对于其中的一个变量Ci来说,其蕴含的信息越多,那么它对于判断A属于Y1还是Y2的贡献就越大,Ci的信息价值就越大,Ci的IV就越大,它就越应该进入到入模变量列表中。


3.IV的计算


前面我们从感性角度和逻辑层面对IV进行了解释和描述,那么回到数学层面,对于一个待评估变量,他的IV值究竟如何计算呢?为了介绍IV的计算方法,我们首先需要认识和理解另一个概念——WOE,因为IV的计算是以WOE为基础的。


3.1WOE


WOE的全称是“Weight of Evidence”,即证据权重。WOE是对原始自变量的一种编码形式。

要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱等等,说的都是一个意思)。分组后,对于第i组,WOE的计算公式如下:


其中,pyi是这个组中响应客户(风险模型中,对应的是违约客户,总之,指的是模型中预测变量取值为“是”或者说1的个体)占所有样本中所有响应客户的比例,pni是这个组中未响应客户占样本中所有未响应客户的比例,#yi是这个组中响应客户的数量,#ni是这个组中未响应客户的数量,#yT是样本中所有响应客户的数量,#nT是样本中所有未响应客户的数量。

从这个公式中我们可以体会到,WOE表示的实际上是“当前分组中响应客户占所有响应客户的比例”和“当前分组中没有响应的客户占所有没有响应的客户的比例”的差异。

对这个公式做一个简单变换,可以得到:


变换以后我们可以看出,WOE也可以这么理解,他表示的是当前这个组中响应的客户和未响应客户的比值,和所有样本中这个比值的差异。这个差异是用这两个比值的比值,再取对数来表示的。WOE越大,这种差异越大,这个分组里的样本响应的可能性就越大,WOE越小,差异越小,这个分组里的样本响应的可能性就越小。

关于WOE编码所表示的意义,大家可以自己再好好体会一下。


3.2 IV的计算公式


有了前面的介绍,我们可以正式给出IV的计算公式。对于一个分组后的变量,第i 组的WOE前面已经介绍过,是这样计算的:


同样,对于分组i,也会有一个对应的IV值,计算公式如下:


有了一个变量各分组的IV值,我们就可以计算整个变量的IV值,方法很简单,就是把各分组的IV相加:


其中,n为变量分组个数。


3.3 用实例介绍IV的计算和使用


下面我们通过一个实例来讲解一下IV的使用方式。


3.3.1 实例


假设我们需要构建一个预测模型,这个模型是为了预测公司的客户集合中的每个客户对于我们的某项营销活动是否能够响应,或者说我们要预测的是客户对我们的这项营销活动响应的可能性有多大。假设我们已经从公司客户列表中随机抽取了100000个客户进行了营销活动测试,收集了这些客户的响应结果,作为我们的建模数据集,其中响应的客户有10000个。另外假设我们也已经提取到了这些客户的一些变量,作为我们模型的候选变量集,这些变量包括以下这些(实际情况中,我们拥有的变量可能比这些多得多,这里列出的变量仅仅是为了说明我们的问题):

  • 最近一个月是否有购买;
  • 最近一次购买金额;
  • 最近一笔购买的商品类别;
  • 是否是公司VIP客户;

假设,我们已经对这些变量进行了离散化,统计的结果如下面几张表所示。

(1) 最近一个月是否有过购买:



(2) 最近一次购买金额:


(3) 最近一笔购买的商品类别:


(4) 是否是公司VIP客户:



3.3.2 计算WOE和IV


我们以其中的一个变量“最近一次购买金额”变量为例:


我们把这个变量离散化为了4个分段:<100元,[100,200),[200,500),>=500元。首先,根据WOE计算公式,这四个分段的WOE分别为:


插播一段,从上面的计算结果中我们可以看一下WOE的基本特点:

  • 当前分组中,响应的比例越大,WOE值越大;
  • 当前分组WOE的正负,由当前分组响应和未响应的比例,与样本整体响应和未响应的比例的大小关系决定,当前分组的比例小于样本整体比例时,WOE为负,当前分组的比例大于整体比例时,WOE为正,当前分组的比例和整体比例相等时,WOE为0。
  • WOE的取值范围是全体实数。

我们进一步理解一下WOE,会发现,WOE其实描述了变量当前这个分组,对判断个体是否会响应(或者说属于哪个类)所起到影响方向和大小,当WOE为正时,变量当前取值对判断个体是否会响应起到的正向的影响,当WOE为负时,起到了负向影响。而WOE值的大小,则是这个影响的大小的体现。

好,回到正题,计算完WOE,我们分别计算四个分组的IV值:


再插播一段,从上面IV的计算结果我们可以看出IV的以下特点:

  • 对于变量的一个分组,这个分组的响应和未响应的比例与样本整体响应和未响应的比例相差越大,IV值越大,否则,IV值越小;
  • 极端情况下,当前分组的响应和未响应的比例和样本整体的响应和未响应的比例相等时,IV值为0;
  • IV值的取值范围是[0,+∞),且,当当前分组中只包含响应客户或者未响应客户时,IV = +∞。

OK,再次回到正题。最后,我们计算变量总IV值:



3.3.3 IV值的比较和变量预测能力的排序


我们已经计算了四个变量中其中一个的WOE和IV值。另外三个的计算过程我们不再详细的说明,直接给出IV结果。

  • 最近一个月是否有过购买:0.250224725
  • 最近一笔购买的商品类别:0.615275563
  • 是否是公司VIP客户:1.56550367

前面我们已经计算过,最近一次购买金额的IV为0.49270645

这四个变量IV排序结果是这样的:是否是公司VIP客户 > 最近一笔购买的商品类别 > 最近一次购买金额 > 最近一个月是否有过购买。我们发现“是否是公司VIP客户”是预测能力最高的变量,“最近一个月是否有过购买”是预测能力最低的变量。如果我们需要在这四个变量中去挑选变量,就可以根据IV从高到低去挑选了。


4.关于IV和WOE的进一步思考


4.1 为什么用IV而不是直接用WOE


从上面的内容来看,变量各分组的WOE和IV都隐含着这个分组对目标变量的预测能力这样的意义。那我们为什么不直接用WOE相加或者绝对值相加作为衡量一个变量整体预测能力的指标呢?

并且,从计算公式来看,对于变量的一个分组,IV是WOE乘以这个分组响应占比和未响应占比的差。而一个变量的IV等于各分组IV的和。如果愿意,我们同样也能用WOE构造出一个这样的一个和出来,我们只需要把变量各个分组的WOE和取绝对值再相加,即(取绝对值是因为WOE可正可负,如果不取绝对值,则会把变量的区分度通过正负抵消的方式抵消掉):


那么我们为什么不直接用这个WOE绝对值的加和来衡量一个变量整体预测能力的好坏,而是要用WOE处理后的IV呢。

我们这里给出两个原因。IV和WOE的差别在于IV在WOE基础上乘以的那个,我们暂且用pyn来代表这个值。

第一个原因,当我们衡量一个变量的预测能力时,我们所使用的指标值不应该是负数,否则,说一个变量的预测能力的指标是-2.3,听起来很别扭。从这个角度讲,乘以pyn这个系数,保证了变量每个分组的结果都是非负数,你可以验证一下,当一个分组的WOE是正数时,pyn也是正数,当一个分组的WOE是负数时,pyn也是负数,而当一个分组的WOE=0时,pyn也是0。

当然,上面的原因不是最主要的,因为其实我们上面提到的这个指标也可以完全避免负数的出现。

更主要的原因,也就是第二个原因是,乘以pyn后,体现出了变量当前分组中个体的数量占整体个体数量的比例,对变量预测能力的影响。怎么理解这句话呢?我们还是举个例子。

假设我们上面所说的营销响应模型中,还有一个变量A,其取值只有两个:0,1,数据如下:


我们从上表可以看出,当变量A取值1时,其响应比例达到了90%,非常的高,但是我们能否说变量A的预测能力非常强呢?不能。为什么呢?原因就在于,A取1时,响应比例虽然很高,但这个分组的客户数太少了,占的比例太低了。虽然,如果一个客户在A这个变量上取1,那他有90%的响应可能性,但是一个客户变量A取1的可能性本身就非常的低。所以,对于样本整体来说,变量的预测能力并没有那么强。我们分别看一下变量各分组和整体的WOE,IV。


从这个表我们可以看到,变量取1时,响应比达到90%,对应的WOE很高,但对应的IV却很低,原因就在于IV在WOE的前面乘以了一个系数,而这个系数很好的考虑了这个分组中样本占整体样本的比例,比例越低,这个分组对变量整体预测能力的贡献越低。相反,如果直接用WOE的绝对值加和,会得到一个很高的指标,这是不合理的。


4.2 IV的极端情况以及处理方式


IV依赖WOE,并且IV是一个很好的衡量自变量对目标变量影响程度的指标。但是,使用过程中应该注意一个问题:变量的任何分组中,不应该出现响应数=0或非响应数=0的情况。

原因很简单,当变量一个分组中,响应数=0时,


此时对应的IVi为+∞。

而当变量一个分组中,没有响应的数量 = 0时,


此时的IVi为+∞。

IVi无论等于负无穷还是正无穷,都是没有意义的。

由上述问题我们可以看到,使用IV其实有一个缺点,就是不能自动处理变量的分组中出现响应比例为0或100%的情况。那么,遇到响应比例为0或者100%的情况,我们应该怎么做呢?建议如下:

(1)如果可能,直接把这个分组做成一个规则,作为模型的前置条件或补充条件;

(2)重新对变量进行离散化或分组,使每个分组的响应比例都不为0且不为100%,尤其是当一个分组个体数很小时(比如小于100个),强烈建议这样做,因为本身把一个分组个体数弄得很小就不是太合理。

(3)如果上面两种方法都无法使用,建议人工把该分组的响应数和非响应的数量进行一定的调整。如果响应数原本为0,可以人工调整响应数为1,如果非响应数原本为0,可以人工调整非响应数为1.

]]>
taoCMS-基于php+sqlite最小巧的CMS 2017-09-17 17:09:54