- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563253 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174199
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
! Q0 H1 x3 g; Z2 b/ [! ^: t4 P. U! J7 w/ D5 ^/ t' c2 m% ^
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
2 V! K$ ?/ O5 L$ A/ ~0 i: Q( F/ Q" a. B
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。9 _5 f7 C$ h8 a3 p
+ Y; g: J1 ?+ x8 y
1. 确定目标,准备数据
! q/ b0 t& T. z1 m建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
/ T) |# i: B& ~4 u& e
. Y- G5 b) t) a( e6 i' [2 I$ o历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
# U: b1 D/ }) K; q( Q* m0 D
4 o0 n% U1 y& R: P$ J首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。7 X2 v* V7 v0 Y. P+ x# H j
$ A. i1 z% C" H0 k除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
6 b3 I: H! X) U7 Q5 T- K L+ F! D
3 u$ K/ u k& o3 R, A采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。$ Z9 P3 a: ~& ]6 ?/ G
5 O+ l8 Q1 |! p9 ] R
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。( K W9 E2 _6 b$ o" l& Z$ L
6 P. m6 U2 e1 G; A如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。 W5 y. u: N% Y9 d
' ^: }, W3 d7 P8 p3 X' c. Y. w
2. 下载软件,配置建模外部库3 E$ j0 u6 \3 F5 u7 k0 C( W
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。: W/ k: H. X. V1 g( i
G5 k- O- P* m% P
(1)下载安装集算器(SPL)和易明建模软件, q! h! }8 p$ A' W! q( ]
集算器下载:
# @" a2 @7 z5 z; }( {“http://c.raqsoft.com.cn/article/1595816810031” b+ D) c3 @- @9 V
+ J5 ~3 B4 A6 ?2 V" _) k# k
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
& n# U' N8 y4 K
" B6 |3 L! M q* M. b I, r安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
8 t. \6 n3 @9 `- g$ X6 z/ C# N/ j- w" \0 w
+ K1 Z- A3 p5 s1 z; |8 T8 k9 c
/ d) K* [! R6 n3 B o, g
(2)在SPL中配置外部库
8 [9 a2 e9 t$ x0 h8 [9 u(a)复制外部库所需要的文件" ^3 i8 k4 k' {5 O5 X y [
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
& M6 a! I, A( G% a& e2 g; h
$ L$ T( {9 V; ~ Q% E8 Y) D6 D2 d6 t9 k; R' p
* j, F& k2 E4 z) J+ Z0 _- u然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。# |+ [' W0 t/ K9 D! E
. r# L! p% z7 j; J建模外部库所需的文件有:; y5 `& b; y4 r- c; u, M+ M
7 K# T' a9 K8 L" X, P
1>易明建模目录的YModelCil中含有以下jar和xml, v% x% x3 H2 V- R# \, n; P$ C! C
4 V0 K" e3 q5 m) w2 ]1 S8 l6 jant-1.8.2.jar
$ e3 }( j8 [- g8 fcommons-beanutils.jar
* b7 t+ x) a9 o: ~commons-lang-2.6.jar
# I$ y9 q; D! I* p4 ~ezmorph-1.0.2.jar
: d8 v! P6 O+ i; w$ u5 [json-lib-1.1-jdk13.jar0 X+ T; p) I& ]8 `
raq-ymodel-cli-2.10.jar
3 O5 x8 k" B* r# \* ~userconfig.xml
7 l# v1 A* h+ n( `' ]$ a
3 h" T/ p5 [" M! u* p0 u2>易明建模的lib中含有以下jar
O& C, |6 ~1 |. _! ]0 ^' d Q
" U ^5 D6 j/ x2 n E3 jcommons-io-2.4.jar
( e( N$ f' m6 ?) O* K7 xesproc-ext-20211104.jar
. C+ \% B# w6 U+ V( _fastjson-1.2.58.jar
7 E! Q7 ?$ R; ugson-2.8.0.jar
: N% w2 m* L# R- Ljackson-annotations-2.9.6.jar
9 Q7 K" g' a- V J) [- u; Qjackson-core-2.9.6.jar
2 G/ I' ~6 ` y) [1 U1 I# sjackson-databind-2.9.6.jar
9 r% V! g# `$ w2 yjackson-databind-2.9.6-sources.jar" u" `" d, U, [2 |2 t
jackson-dataformat-msgpack-0.8.14.jar9 x v! J. f4 {2 V% e* }
mining.jar
) Y0 W; W: X& Q' Y. ~3 |1 X; Emsgpack-0.6.12.jar6 l. ~+ [4 U& e. Q: C. V. e
msgpack-core-0.8.16.jar
' [6 L' s, m5 y9 i- o3 h2 H8 p4 e- `) ]) ~% v" O
(b)设置userconfig.xml文件参数
- [% c6 r( c4 q2 [( v( O) U6 n4 g2 S在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数$ n6 d3 g6 [" @. K5 l
, @+ `8 C7 z, }% m) Z/ I名称 参数说明+ a3 ~& Y& @2 p4 S+ A7 [7 ]5 x
sAppHome 易明建模的安装目录/ R4 O8 Z9 ]& w$ X* C
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
0 K3 w' ^5 p! U J8 U5 hiPythonServerPort Python服务网络端口+ e8 s, `5 R& k) x5 f& Q/ d' p2 E8 e
iPythonProcessNumber Python进程数
- E) g- q' ~' J2 N) E) Q( kbAutoDecideImpute 是否智能补缺+ R# P- |* \3 Y5 G: H; J
iResampleMultiple 重抽样次数9 G8 `) B6 w q; u$ _. ]
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
% i/ v# t& }1 F4 B. _7 b% Q
! t" e0 ~4 h4 I. C' Q) D% q% x, M<?xml version="1.0" encoding="UTF-8"?>, a! V+ {% g: u' ^/ Q8 p( |8 w
<Config Version="1">, ?4 @1 {# j0 S+ c
<Options>
7 H7 d6 T; H) k+ @ <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>3 F. }! d% z+ m! M3 \
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>" r, [8 n! O, d! r" t E
<Option Name="iPythonServerPort" Value="8510"/>
% N9 O, S' b9 t* x5 V <Option Name="iPythonProcessNumber" Value="2"/>
: P9 [9 C) ^5 F. q! j <Option Name="bAutoDecideImpute" Value="true"/>
! k! u; C0 ~ C2 V+ h' F <Option Name="iResampleMultiple" Value="150"/> - r% C: n/ C- g
</Options>. ~# O+ e# f% p) Z! @5 Q m! o$ p
</Config>) u: F p" O7 B+ H& K7 V) p5 U
1; w& R6 M# |; T/ [4 O$ F
29 p" {1 t' H" k2 G& a
3
$ r5 T; }" c$ a. |4
0 \5 o" b& `* M5* S2 H7 o9 i d4 ~
60 b* x( Y. Z8 C9 y- B
7
1 U5 s1 F% T' L5 s: D" u85 t" M q6 ~" u9 N0 D
97 R* y6 Q' W u9 Q* X7 E
10
& S6 j; o$ d5 k- l2 p" t11
- J$ u# S0 `9 v5 W' o, O% F, n其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。; i a$ `" ~9 [6 H' [
+ H8 q' ^% U& I# I6 a
(c)SPL环境配置
; f d0 ^3 J b8 ?+ C% l1>. 配置外部库' Q& ? ]2 S; I7 t7 H3 H
9 K( P, O0 ]/ ?
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。8 G$ c4 p/ U) e2 I& N0 n5 o2 ], {' j
5 _. I) g( } y5 [. |+ Q
0 ~6 n' @ L) |! i
' Z+ h+ o+ G# U在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。1 l) r% s0 H! P; n# j
9 n5 h; U( s3 @+ W<extLibsPath>外部库路径
0 f" L7 \0 V+ O! r! i3 B# L! Z( k$ @
<importLibs>外部库名称(可多个)
* U; L* E( ?- u' e: ~+ O+ W+ g7 Q; m# X4 ?! J9 ?/ D: ]
2>. 线程数设置% B4 m7 }7 g# N7 ^' `) x
5 `9 s/ P; z% P" C9 C如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。8 p u1 K* J+ ]
+ I9 a- U: Z5 C9 {) M2 X4 ~8 l
: n* {0 K: g6 X D( u* {
. T2 S, H; ] [6 |+ Q/ J- v# a在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。0 |6 Y: `. W5 O3 p+ s, `5 O6 I7 q
; ~5 M/ o8 P1 P
<parallelNum>最大并行数
* A) r* f5 ^. ]) g
5 H' m! C3 n! }! f; L. O到此,环境配置完成。0 F+ ]) h _) l3 G& N3 H# Z+ F
7 ]8 q& g; Y6 s. f1 K, J) v3. 建模和预测4 U) G0 b; R; l0 @+ d I
(1)加载数据
5 ~8 T) k) T# |6 NSPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
! \ n: f% N, H# f8 C' h' U9 t$ d
4 r3 Y [+ V+ z! q/ @; `8 @8 c设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。$ Y) m- ^8 o3 M2 S
. _2 Z9 |& y. U0 [6 F& M8 f2 J* `% w6 ?5 |; j2 U
2 C* k r O' g- G0 ]% Y文件命名为bank-full.csv;9 j8 V0 F" Q" j/ n5 W4 g3 K
; c% `3 `7 v. z' a- I5 k6 E
A. v3 _+ t. w/ p& c5 G
1 =file("bank-full.csv").import@tc()
_! c: M& ~" W, y% l2 =ym_env()5 I# E7 m: h' }2 n7 o. |
3 =ym_model(A2,A1)
* Y, j- S- c8 x* T+ BA1 导入建模数据,读成序表+ b1 E/ }/ L0 F, H& M
- M$ j3 Z2 V1 @* v
% w* C* h, w# Q. D. A
6 I9 m8 t' b# IA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。- `- K. K# C( o4 L$ N3 y4 S7 l* q' g
; Q! {3 Y7 o B. _' E1 qA3 加载建模文件,生成md对象2 D& R4 p1 X5 z% o1 k8 S
6 n$ N# l: }6 L# L# i4 {5 t$ n
(2)目标变量设置和变量统计/ `, o; I/ U/ w( O, P
数据加载进来后要设置目标变量. P4 v8 c$ _7 C/ s
) Y2 X5 H+ o& t/ d' {) C3 G9 E. c( f
A1 X' c% }; o3 Q9 A
… …
6 B5 D. ~" g& V! P' [: }4 =ym_target(A3,"y"): ?2 k2 n9 k B0 _6 }. ^
5 =ym_statistics(A3,"age")
) ]3 s5 ~1 H% d; s. k+ t o6 =A1.fname().(ym_statistics(A3,~))
$ R- t: O) P2 hA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
" \2 z# R6 A4 d% s
- V- w. o4 a6 o. e, bA5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。7 M0 [" K& {$ H. m. i1 ]
$ X2 G2 ?! K; X( Z% _! D! o3 C1 b5 ~0 U1 z/ }+ O9 s# ^4 J
5 o! R( _4 _5 X4 r
A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
; w/ M: ]6 B1 Q! p" Z! x6 d2 Y$ T* V2 b/ Y$ ]
* N5 @' J. k, a3 N* O, E ^. `
) q* m: U$ h0 d0 e3 U! X7 J% ~! H- `(3)建立模型和模型表现
1 {2 c6 Z# j: M4 g# Z8 B4 X! NA1 {2 l$ y1 N/ E) s4 A, C. n j
… …
: t8 n3 P& d g P( d' n7 =ym_build_model(A3)
! k/ f) }- _6 s8 =ym_present(A7)2 d, k z" t/ @
9 =ym_performance(A7)+ s% [8 X( ^6 J/ e* W
10 =ym_importance(A7).sort@z(Importance)' D0 e. Q* @$ k s% O4 w& m/ g
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
$ A% ^; [/ c5 X7 j! L; {3 Y
) [0 n1 r+ [/ P: r模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
! h9 a& T! j$ N8 b8 m9 t: c
0 V) J# L. @8 ?& y+ P% @9 `% s0 SA8 返回模型AUC值及参数" l6 ]* f' `% E/ d
" D" v- B2 y; P5 o: I" w
2 n9 u, u& [2 ^& v
/ c; D8 w7 M2 n4 @& [A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……: o& r1 c; Z8 Z1 ~
?( e' t: A$ o s" l* W
) c& v/ J1 l9 c5 P+ O2 S; M# ?4 P
# ~% I! m% q/ E比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线/ f4 N9 [4 a5 z: H6 j
% ]* D. `- J0 W. d' n& F- f. t" h+ P# o+ C/ X
' }+ |! k3 g; u( u/ j9 E
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
3 {7 i) p/ c3 `( L) ]- l# @
4 \3 g" E, U2 @; h' c$ ?* n; c3 X, e8 t7 _6 _+ Q4 `
' ?( W. t) }/ c5 b$ v3 Y(4)保存模型% _4 e; f5 }5 o, O/ j! ~
A
" t& X6 s. F6 x8 ~1 N- u… …
. f/ S6 Q; R7 B- y8 \- g A2 _11 =ym_save_pcf(A7,"bankfull.pcf")5 A7 Y+ O9 Q/ I
12 =ym_json(A7)
5 D1 g& `3 J3 `$ S) O8 c13 >ym_close(A2)7 f; |' @2 b: f* U
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。5 p# p% F/ r% Z1 g* `
+ P# q2 Q& o# z% u% O
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
6 Y" ?; ~1 H3 ]% A/ Y( v
* j" N- Y4 ^, s; u3 R0 V: s4 dA13 关闭环境,释放资源。. H$ s K8 U# R2 b! F( h4 G( N( r; x
! ~' }) j! J# L/ F$ e: F7 T! u" z: v(5)预测
' ]" n. c& ]. j9 H1 |# V预测之前需要有pcf模型文件和预测数据集
/ y/ m K) s+ e( c, [
3 y# c, b+ g& ^/ `A; P* K# T: w$ g) ?# F; i
1 =ym_env()
+ X/ R; E8 v* J, Q; T+ x2 =ym_load_pcf("bankfull.pcf")
: x7 Q+ T$ `' ~+ U+ P( ?3 =file("bank-full2.csv").import@tc()
6 @/ p: {3 S; ^8 f4 =ym_predict(A2,A3)7 A* R2 R3 C0 O0 l1 \6 x
5 =ym_result(A3)
% f8 r3 e8 g2 P" S2 p ^7 y6 =file("bank-full_result.csv").export@tc(A4)/ K4 C. B7 x# K) G
7 >ym_close(A1) R6 x+ u! v; l) s7 }) @) K7 y# ^
A1 初始化环境/ h3 K. U4 q; j* ~+ {; L( A
6 \& j" N6 v+ N, p: d
A2 导入pcf模型文件,生成pd模型对象。
) N) G8 b& N! u6 e& u+ ~* _$ J
7 ~2 n! N: P3 b1 ?! ^# `A3 导入预测数据集,读成序表
- M2 h4 I$ f! T6 a9 A$ F. C2 c W
& C3 o7 \0 P j5 Z3 aA4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)- A& }+ c- B/ U
8 b3 p& X7 f" [5 _9 P. {A5 获取预测结果
) ], q% E& m) l6 }% @7 _% u6 r5 O& j
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
% t$ x9 d2 i( M3 f& _6 e9 W
1 g0 Z9 x, E+ Y" {' S% H4 l2 q" E D7 b" i# |5 f/ I9 h
A7 关闭环境,释放资源$ n* [& C! c5 Q1 n: L
k! T0 j) t- ^8 P; c
4. 集成调用
( T/ ^! S! J. Y% \1 P; gSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465606 E5 U8 r! a0 |) k4 @; t
1 F5 ^) _) \, U
总结* |) N/ \4 X* k
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。& J' f1 K/ y/ k/ h3 Q r
. w% E, a! Y0 L. ?7 x5 F
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
8 K% a+ N) o+ T! j' p7 F) s1 O————————————————
2 g3 K; O1 L5 E+ k" l2 E版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ d0 G( Z7 m' Y: R1 ^% N
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
4 h* g/ H; y6 u7 I |" k
]9 _0 K8 U! h
. v* \' A! ]! E- } |
zan
|