在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 563278 点 威望 12 点 阅读权限 255 积分 174206 相册 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 也不错
! c6 Z3 l, T3 J0 j 6 h9 k2 n x. \2 [5 c( l' o! L
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。+ n q$ k' b, s+ R U
9 H9 g" ], w7 J' R9 R q
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。" ]+ I" z8 l5 v$ t& F
0 }$ ]$ C$ A2 |, i$ X0 _/ R# O 1. 确定目标,准备数据
. e+ T$ V% Y+ V4 F6 d& J G 建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
% h1 S5 L, P/ A' M: k p! t! K8 @7 G
( m v( t4 Y8 y5 U; z3 B 历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:& d6 [# B# Q0 b s: _! u, ]
4 X! W7 ]- x) H9 P* q( O0 v5 O, Z
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
1 f6 N. ^( p; y I" ?* `
5 s0 h3 Z( p! y A, i) L 除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
8 @, L6 V) c4 X* g. k- G5 k
C: z7 t+ ?! O. D3 n% S! \4 Z 采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。' z/ A" e8 m; [! b
0 y. i f, q& S( K3 f- O
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
/ p$ e5 ], B) g3 r; H4 p
8 w; V9 t6 T9 A! [" Y3 ]8 w; { 如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
9 i$ i9 \' G9 F d5 ` \! s* R
. i$ k4 s. A: E 2. 下载软件,配置建模外部库, \0 z- a, A* u/ i7 G
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。" p5 f: p& J2 J' H! ?9 h
- t/ E: N5 }) I$ v1 t
(1)下载安装集算器(SPL)和易明建模软件" ~* L- }5 Z- Z8 r) S, D; X( x" |
集算器下载:5 W" ]& ]4 ?& A
“http://c.raqsoft.com.cn/article/1595816810031”& h, M" q& V# S% h, B3 i. U
: b( g; z4 o8 r8 r
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”& h1 X( t8 q! P8 B
4 N s9 K8 V- P! X2 M; T
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel( Y. e2 v2 b- |7 d. a/ \1 @) K
* _$ I6 a: M- S$ Z& ]4 } 0 N0 p0 I% J2 q8 t6 s9 Y0 _
4 ~5 ~& { Y- f' v% s8 y/ Y9 C& m
(2)在SPL中配置外部库9 s7 m9 q; c6 F" [0 a M
(a)复制外部库所需要的文件" c2 [6 o' l, D* P; A* _
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
7 |. {* y9 Y5 J! d: u) \& z ; o% c6 u$ r6 d. w; _( E8 h( j
. _3 {( m: t- r- Q! J' m4 h
- ^. {; o6 u0 K7 i. V) f: C 然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
3 Y9 U; n: r/ V, B; V6 o
2 p4 I4 ~- j# D7 @& I9 S 建模外部库所需的文件有:7 m8 c" i) Y" s: f' q
P4 [- b& w C2 k5 }& S$ }. G
1>易明建模目录的YModelCil中含有以下jar和xml
4 U1 s% \' K8 @
, [- V# ]) A, {3 J8 ~ ant-1.8.2.jar3 X1 M( q' E' c- Y$ l9 {
commons-beanutils.jar
7 E1 X% Z1 D! R4 l commons-lang-2.6.jar' t- w2 ~# |& ]. {) N
ezmorph-1.0.2.jar. O7 k" C4 U, ?$ \# p1 B! l
json-lib-1.1-jdk13.jar
$ Z! P: g8 o& w$ {- r, i0 U( f) C. L raq-ymodel-cli-2.10.jar; K" N) }8 C* r; L
userconfig.xml
. T& C* n3 F1 m8 h7 ^8 f0 k + i* h3 Q T" w* e& K6 d5 t! D
2>易明建模的lib中含有以下jar& E$ U$ y5 z1 y4 s0 S* b+ B
6 `7 ] F. f, O- K& J$ X
commons-io-2.4.jar
0 \4 y" k: t" k# f/ e8 U esproc-ext-20211104.jar; L& O( T& X: H. l4 J( ]3 N
fastjson-1.2.58.jar
$ j/ i% L9 J, } gson-2.8.0.jar) |% S F6 N* e
jackson-annotations-2.9.6.jar. D; C% z: V) H5 R
jackson-core-2.9.6.jar
' N! W9 |9 V: t5 w" U/ t' I jackson-databind-2.9.6.jar
. x8 N* u6 b' W4 H jackson-databind-2.9.6-sources.jar
, G" Y! O' i/ U; I- ^ jackson-dataformat-msgpack-0.8.14.jar7 V6 w) c8 F6 ~' O' S2 ]2 w
mining.jar
1 ~/ B% E, F, v1 X# K! l% @ msgpack-0.6.12.jar
2 I5 R" ~5 ^+ j3 h3 H5 M msgpack-core-0.8.16.jar
/ l; ?, I4 e4 R; s! _
2 b( d: ^/ @1 Y) D) H (b)设置userconfig.xml文件参数
/ }. X: @ h. W8 j: Z 在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
v# s0 j, x$ y: d 8 n5 X% Q& X' E( f2 {/ \
名称 参数说明
- J! b/ Q0 N3 L, L# K: ~% H2 A' D' d sAppHome 易明建模的安装目录$ ~6 @+ J$ P# }; l
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7/ I* O# w) t' J
iPythonServerPort Python服务网络端口( F; w3 E* m# r8 e* p9 d' u, ~5 k
iPythonProcessNumber Python进程数. ^0 ~3 C0 H0 G7 M4 r
bAutoDecideImpute 是否智能补缺
. e. X$ I# k, u iResampleMultiple 重抽样次数0 L6 E' w; [4 B9 d
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。" A' e: R" S, V; T; c6 K" A
) D) h/ r0 y: y; m <?xml version="1.0" encoding="UTF-8"?>
4 Z4 i; U6 {: d- n <Config Version="1">% k1 C" s* |8 B( Q4 S
<Options>
- F) ^$ [1 l3 n( v <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>% s' [3 R; Y8 y2 W7 M' F$ u& `
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
" v4 m! b( v' u. `9 d9 q <Option Name="iPythonServerPort" Value="8510"/>
+ E* R Y. J2 @6 P( @$ [ <Option Name="iPythonProcessNumber" Value="2"/>
5 d7 q( \$ ]2 [* h9 ?. |9 q. v2 [) q <Option Name="bAutoDecideImpute" Value="true"/>
( \4 C/ Y; Z5 ` <Option Name="iResampleMultiple" Value="150"/> . C2 b5 K% W. ?1 Z' g$ ?8 ]
</Options>
7 x* v! ^9 s( R! t9 m) j </Config>
! q2 m: d0 ]# n: [% y( V 1
) g$ S, V/ a: Z0 X- `2 h7 b1 M 2
7 ?, k4 F+ n- r& j$ t 3
% f5 ? r4 B% a' r6 k o 4
( u5 P4 Q8 Q* T1 |& R 5
. n9 O6 g) t% H' l( _ 6( }1 r- l+ E |: W" [# y9 v( ^
7
9 X& K2 q! ?5 X" U: [ 8
+ Q6 H Z6 O( X5 y 9
+ M9 F: j7 }8 z! D2 h: R5 U7 ~+ L 10( e( g' T: r1 L3 h4 H* l! S# i' q
11
# q! ?" f3 q9 W+ |9 l 其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
! f) n* B0 J3 r7 H/ f
) n7 e4 S8 W; U (c)SPL环境配置
: F* X3 ], }" ]& ~% j 1>. 配置外部库
% {( h0 _ D1 j, U6 h5 D 8 _' |0 E! w! S3 B2 w
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
+ i( d! s! j0 y9 ^1 }5 i + a4 u; [7 E' J# v5 N- _9 A# T5 a2 S
4 c6 T. W8 v, D V2 s
1 K2 R% y* x$ C# h: }' @5 F2 B 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。3 [" N) J/ k3 W) J: N1 R4 `3 L
* z/ ^3 \" y! i" G <extLibsPath>外部库路径
6 G7 ?$ w& P' i; y % F1 i, y2 p. B/ R+ D4 l6 y, c
<importLibs>外部库名称(可多个)
/ N! ]) T4 g' r- l 9 Q9 I v! E8 l4 E3 O$ ^
2>. 线程数设置0 Y2 s$ B! I+ D4 ]3 _" s, o
: C0 L7 e& B0 J* ^( e 如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
# i: v' k. I" h; S' G: ]) _ - X. F$ y% O L1 N7 a I- B
8 J: W1 r6 L& m) X
/ M, _! `7 l/ p9 y( d
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。; f2 R/ ^6 W, A( \4 p6 n
* k" H" Z, J- ~% ]: ^' a% J1 H <parallelNum>最大并行数
; A- v) ?$ T+ l1 E % C; |+ I" s1 G2 B- {) C
到此,环境配置完成。
+ W! C+ J7 H+ W1 O
Q) C+ ^+ G6 X& Y 3. 建模和预测& B9 _; D, K8 y# N, f
(1)加载数据
6 _7 M. h7 V' X; R' w, p. j SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。6 ~ x2 e: e) B9 ~; u: n& C
, P, u! f. F% x" z' p 设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
/ c! K) Q: u6 m3 \( {! r
* }7 R8 o: x5 V- T9 P
4 Q% F% W- L" U& g( f) l # V" x! }+ I+ g# @: O3 w6 g
文件命名为bank-full.csv;/ _' V/ _$ k( _' A. G* Z3 T$ Z
) i- q. y% |& |( D$ Q3 r. n
A2 d2 w) m9 z% U
1 =file("bank-full.csv").import@tc()9 t+ O& y6 H. _; F( `" G1 s) E
2 =ym_env()$ i- @' l4 t( U2 E2 W' O% ~
3 =ym_model(A2,A1)1 [9 |% u+ b7 Y9 A
A1 导入建模数据,读成序表$ K& P! X) R& J$ S6 ~& k
! y7 p- u4 L$ S$ i/ ^
+ ] ?$ S- O; `* g) F3 q. g
& z1 q) I) ~) X! Z6 n A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
1 _% x8 D! F P C. U4 L
4 H4 A2 V9 f+ { A3 加载建模文件,生成md对象$ F8 p* g9 k K$ Y1 e7 B$ Y
7 ~ t& P9 y- M5 L) y: z- j7 `
(2)目标变量设置和变量统计" D) x- ~' W' ]+ J" ~$ }& M
数据加载进来后要设置目标变量- D2 v0 e! S5 E0 ?1 Y/ P n
( Z- p4 o3 ~: F1 o! c
A3 p! s' K: V9 {* m- a* \
… …! D- L3 g6 \ g) @" o$ N* A
4 =ym_target(A3,"y")- f$ Q$ u4 V6 z* I1 b- h1 m: E) \
5 =ym_statistics(A3,"age")
, W9 a! |- r4 {( ~$ B 6 =A1.fname().(ym_statistics(A3,~))9 r4 p1 `* l9 x& R7 x
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。$ A$ v" k' j! H/ x
2 d9 K4 o+ m! u, ~- l A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。- z6 l9 ?% F, N2 U6 M0 K$ }
0 x1 l& j9 Y* J+ D; S' o0 M: G
- Z5 r1 r) _' }8 k! f) k
6 I+ m% x' w+ r; z7 ~. J A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
! l7 r* g$ e0 H+ t/ _
* G$ X& H9 z1 u
- J, X4 O6 q! W! O. w
2 M0 b/ f( m2 b2 F9 t3 S (3)建立模型和模型表现' X1 h9 c7 L" U# H
A
' ]/ K+ g. L5 W; F1 E) P# |4 z … …+ { v4 r3 D2 o/ c4 u! K' k
7 =ym_build_model(A3): @2 u9 G7 O# e
8 =ym_present(A7)
7 r) a9 z3 i: _/ {$ @* o1 T L 9 =ym_performance(A7)
. [! f8 s2 {0 [ 10 =ym_importance(A7).sort@z(Importance)
! p5 x% V8 _' ~' e A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。/ D) i, d4 l$ |! F% k
; q( W' R: F: X5 P 模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
) [3 r. r0 N4 I4 Q % q9 G* f6 j2 E1 C! J) p
A8 返回模型AUC值及参数: o* @# O* K: O Q1 Q+ p0 v6 R
( M+ D. t( L* A d7 N
9 U# c" K% U: m0 @5 c; B
2 H5 @. Y$ u! B A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
3 W5 w8 Z) h8 r7 j: `) {/ a
! v! e- S" _1 H7 @1 Z0 \5 x 0 O- z* n( [ O
/ b/ R0 M- Y7 D- E+ O6 a" Z
比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线' S5 Y5 h! |/ }" A
: _5 x/ g8 c9 i
* X4 {$ x) }+ F2 n e: X f
" H: A5 {: {* G) N% T+ u A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。1 a, ^) ^1 I9 q9 w+ d. m: U
i( S/ W) K7 u$ V" J) J0 P ' P2 A9 F5 R4 Q! Z8 k4 P4 _
' m0 _; o+ y' d+ P- r3 u (4)保存模型
6 k) u/ N1 T5 B+ k0 V4 f0 v8 i6 X A
0 |0 E) N) R; a: k1 K7 T8 j8 L … …
- y' W- U9 N: x! `, A/ f 11 =ym_save_pcf(A7,"bankfull.pcf")
, _* N7 V* _6 \: t r: |+ i 12 =ym_json(A7)) o- p* w7 A4 @- n
13 >ym_close(A2): h7 b+ K' i) e' a* D$ J. i
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。/ f4 [6 v! _# d6 p& ]& S
7 @3 Y2 W" V6 }$ J' M
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
. O3 d# {+ ]0 [ ; m: d: H. a8 j; `& M$ K2 j
A13 关闭环境,释放资源。
$ G/ `' r( j! z7 @ ' `: O5 B, x' w3 G! r& i& b
(5)预测
0 R& a5 d1 ?/ ^ h9 j: M. @ 预测之前需要有pcf模型文件和预测数据集8 J! T# F1 d6 @+ ^
8 _! \1 Q5 x4 o1 P8 I7 R
A% c9 x- M: Q8 L# g
1 =ym_env()
' |) K6 N8 ]! y e/ n/ j8 g 2 =ym_load_pcf("bankfull.pcf")
) K: Y! t, ]# w- p 3 =file("bank-full2.csv").import@tc()
6 B. b7 \- D: d; O+ E1 h3 x$ S2 \ 4 =ym_predict(A2,A3): e. k1 J, B, ^" q, X+ M
5 =ym_result(A3)
2 x. c' C0 ]2 [2 M( l 6 =file("bank-full_result.csv").export@tc(A4)% A: r9 a# n9 G, R2 \6 j8 S
7 >ym_close(A1)# S# U5 I" O7 Y
A1 初始化环境& w7 M# i3 _; T- g" [
& X7 b" @' ~6 p) h1 s5 U3 ~ A2 导入pcf模型文件,生成pd模型对象。
6 j: F+ u) `$ n* f9 N) R! R
7 q" c* P6 B. t, T& j A3 导入预测数据集,读成序表$ u8 _( b& x. V1 v
5 I) B, Q& L, Y H, ^ A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)( ]) \6 n. U% ~6 P. v( k( g, \
* Y0 |# L( O+ E& [$ H! g A5 获取预测结果) [6 f- s I7 m% u9 P
1 W" ?: \, @' a, p& ^% x1 v7 r+ x9 Q
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
2 D8 v, R0 o; `, V ( R. ?2 Q* }5 r: c* B/ ?2 n- [% _
0 z! ~9 q: g% F
A7 关闭环境,释放资源2 F. n, ]8 _' Q& z) A2 A% T# b
q7 S+ L$ u' q- A5 P' y1 A
4. 集成调用
) o9 X) \, z( h8 b) v \% b SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
5 @- [, `# K, a$ @9 t. o : M/ I* W* X& g( j) Z. g5 a5 {
总结( o$ d! A* Y7 ^0 P
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
5 Q. ?8 h2 E4 n' y7 x x2 k+ `; H0 { 1 S: W" x0 `2 O" P O0 n" G ~
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。) a6 H" [# O5 o! W
————————————————
1 X- E; a. }$ f- ~, j2 a( Y' { 版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# A7 t/ L/ @4 H: K 原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462) b0 o1 M& w5 p" D
0 s4 G3 Z8 M3 [, G* Q$ f
8 R- A4 Y% ^# @2 V: I
zan