数学建模社区-数学中国
标题:
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
[打印本页]
作者:
杨利霞
时间:
2022-9-7 15:33
标题:
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
% }8 u- ~6 |1 Q% h
8 f# _( R2 k8 B& B
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
! I7 ]( \3 [3 _! `! {$ C
8 ^% D4 Y0 ]' L
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
! |7 K. H& E* R7 Z. t
9 A0 V' g. [- k6 K
1. 确定目标,准备数据
( z x. n8 h2 n" b- F% {
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
/ K8 I5 U; c, u6 F% g: o
; N. N: p* J0 O
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
8 z: Y7 G" F9 [8 q
" i+ }/ N e" {# V' F+ O: J
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
8 p! N+ x j8 S" R z6 \
! D" k) ]3 E h/ ] T
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
) R' w8 ]$ ]0 u) ^% o& V& j
8 _& R- p: ]4 O Q* d% x& f
采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
3 U L" m0 y: t/ n
" @& y' c2 J7 F1 _+ n7 B
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
" y7 i5 G$ O7 a8 e# ~ E+ r
" {9 s; R; m3 ?0 c
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
# p8 v. ?, s, M0 d% P7 R
2 G9 P8 d2 \7 F, U3 _
2. 下载软件,配置建模外部库
" L( c* V/ W+ a1 _. n/ z3 t) d
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
( ] B H& V4 h% K7 \9 T
1 I0 _6 ^6 R* b$ j
(1)下载安装集算器(SPL)和易明建模软件
! K$ m, e' T; B8 Q, h
集算器下载:
* h( r. O0 _" r( X H( l. L
“http://c.raqsoft.com.cn/article/1595816810031”
/ F; P, S$ Q" T9 t0 e, J5 t
" _- x- f+ m8 A, S1 u
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
& ?, K: O& N3 B4 \
4 E4 d$ ]6 _8 l6 f6 F
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
1 y P9 Z1 R- t: C6 s& T
; H7 z' G& M. |: J4 t2 g
4 ? E' ~5 Y3 k# \
* \3 l8 q$ q6 }& `8 n, r% r1 o
(2)在SPL中配置外部库
: V. e$ w9 d& c0 B/ X
(a)复制外部库所需要的文件
9 E) B, P+ Z# k& f# X' Q/ p
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
) v: ]; \' V& _0 B% C6 J& }; f4 B
; L' ?( t1 U# p$ u H' o# u. q2 \8 W
* _4 ?& j- A q' N) X9 T% W- _4 L# o
3 K/ U, H! a( R- \( J z ]/ V
然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
) D7 ]! \# B) Z3 [4 _* u7 v& Q
1 Q' Q3 J# c% i* L
建模外部库所需的文件有:
0 o9 b( B; G7 b3 U
0 B) }* |1 x! O5 q4 j5 Q1 k! O
1>易明建模目录的YModelCil中含有以下jar和xml
9 W- g$ q2 i, L# z! e
" D* u% Q3 b+ R' w% U) i/ O% @0 E
ant-1.8.2.jar
( L% E# h! ~, ~$ a+ y# }
commons-beanutils.jar
% e8 S0 q1 Q3 Z9 e) C; N
commons-lang-2.6.jar
% W( N7 I6 u, ^/ M
ezmorph-1.0.2.jar
+ z& `$ q. j# c& D2 l
json-lib-1.1-jdk13.jar
5 Q" k; {: z1 p$ h$ k' c m# Z
raq-ymodel-cli-2.10.jar
# X: I5 K4 c5 w& I- L
userconfig.xml
) T, e! O& ~$ U( j! a: G; c& M
2 |; H( E# W) _4 z% I% }
2>易明建模的lib中含有以下jar
7 ^: Z8 r" s6 V1 ?7 b
. h4 E! P+ l) k6 f9 ^
commons-io-2.4.jar
9 g6 L# l# S" p, X
esproc-ext-20211104.jar
4 E6 |; M8 q; E/ s8 F/ W1 f
fastjson-1.2.58.jar
& Y/ c! T1 p7 S& ]
gson-2.8.0.jar
. w4 O' x8 ?3 d( ?" o
jackson-annotations-2.9.6.jar
/ {; e" X0 D7 P6 X, s: w s
jackson-core-2.9.6.jar
( ]7 W5 n: ?$ h, i$ U
jackson-databind-2.9.6.jar
3 v0 d" o# X% X2 }' V3 o C7 F; Y
jackson-databind-2.9.6-sources.jar
2 X) x( A4 }# N
jackson-dataformat-msgpack-0.8.14.jar
4 w A5 G1 e8 X( A2 M
mining.jar
, k! \( }6 N+ {; m# s9 p8 U
msgpack-0.6.12.jar
( }2 |( @6 P' A3 N4 Q
msgpack-core-0.8.16.jar
$ c; R* a3 y2 R' Q. @+ y; Q
1 c$ V0 A! G2 D1 ]1 I% u
(b)设置userconfig.xml文件参数
- X; n( v- ]' e5 i* ^6 t
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
* H+ ?; E2 Y. F' K2 A5 f& Q- q
/ R8 o/ T, V3 c
名称 参数说明
& y& T/ H6 J! l) k3 C4 ~! Z+ |
sAppHome 易明建模的安装目录
, j+ G5 @& \! Z; K
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
4 e; @5 Q$ v' k
iPythonServerPort Python服务网络端口
6 ~! y) ^) ?$ s0 O7 J0 z
iPythonProcessNumber Python进程数
6 g* h8 G5 c% Q9 b
bAutoDecideImpute 是否智能补缺
2 }7 R q+ R( g$ a/ E' Y" @4 l
iResampleMultiple 重抽样次数
! [% w3 j, k& s' i$ m) a
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
1 X0 p- H$ Y3 y
* p4 \" s$ a0 `' m: A" e2 z
<?xml version="1.0" encoding="UTF-8"?>
. O$ U$ Z& f( r7 W7 [+ C
<Config Version="1">
' h- t; z5 {+ Y2 T- B
<Options>
- O" q' a' V X5 a
<Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
X4 l$ v6 p; c3 n% j* Y
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
6 F9 E- P" F1 O; m7 C+ q/ J
<Option Name="iPythonServerPort" Value="8510"/>
5 _, z5 T3 _2 ?" Q% r* K( j3 X
<Option Name="iPythonProcessNumber" Value="2"/>
1 X: j0 M$ c9 m. ]
<Option Name="bAutoDecideImpute" Value="true"/>
' g) l H4 L- V/ e7 _
<Option Name="iResampleMultiple" Value="150"/>
4 }1 n* }: t& M$ z1 J
</Options>
+ w$ Q1 Y' f; |6 M' u
</Config>
+ P, r% _# [9 B0 ^
1
' _8 ]( l- _* [8 [
2
4 O) F* b2 A0 P4 A) y6 ~! m
3
- V r/ B+ g8 X, P
4
8 e) |0 z! I M3 W, R
5
; O6 }+ W) A5 B' k+ q3 ^2 c Q# n8 O
6
" c- ~1 t1 V: [$ x% p
7
/ o. s9 Z: [$ s5 V( h
8
+ |7 e* T' i2 y2 P6 i. `
9
! q8 [: j4 ` r+ |
10
' e1 A7 n" [8 M, H7 \2 s: d" p* L
11
4 `! A% H5 z$ O4 Q3 o2 B
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
% Z4 I, l+ E( E9 J) j+ L
5 |. p5 y1 C" n* I! C* Q3 x
(c)SPL环境配置
9 f) c# B3 }! w% }8 w6 w
1>. 配置外部库
' w9 J0 r- P. W2 M& }0 S0 P
5 z& {5 B2 y3 @9 w
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
. k" C& ]2 [3 I% q4 X
3 D0 p2 M& j: F, O$ _, t7 i! d- Z
$ i: k* _8 N! f( q
3 l! {3 `3 g5 G+ I; E8 B+ z
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
5 ?& A/ |0 A# Y8 l
- ^* I7 R, O6 N) }+ i# K
<extLibsPath>外部库路径
[7 x- ~: j) b) b: W
/ Y/ m5 t. {9 Q$ Z# S8 s, l
<importLibs>外部库名称(可多个)
! p5 ^4 c: D5 [, ?
3 Q' R8 k. e! w# A9 | `
2>. 线程数设置
/ l) H n* Z% z! ]
, U8 K0 j! z4 h8 U# |
如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
) W5 Z4 T8 \0 Q: [2 ?# _4 P# u) b
- t9 R" o6 G; `
9 Q" l) X/ v/ }; ?$ c
1 w! ~% ^" d [' B& ]. F- E4 n" k
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
3 e0 v0 ]2 z7 x
3 s: g; Y9 {" H3 ~: D
<parallelNum>最大并行数
6 r- H# e! S4 `8 }! U6 b
! K4 Q* n2 v, p
到此,环境配置完成。
- _& I `/ p3 O2 l5 W; c, S4 K; {
8 h+ k) M& ~4 s) _9 A' z! \: z4 r
3. 建模和预测
! p9 [; K- b3 `
(1)加载数据
3 g4 m; d1 |* o# s* h2 z* `6 _
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
5 [1 x* Q; ~% C* p. m
0 e' Q/ e7 }# B- c/ \. g4 h, q: [
设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
9 \7 w! i, c6 g. s. b6 q5 r
( A# ^# n/ _/ W b2 C5 m+ r
Q3 I4 w+ P& R
; n3 ~0 L: K1 r
文件命名为bank-full.csv;
$ U& [7 z2 Q, I- p9 t
% f/ ?; z+ ]4 i
A
3 ^4 J, I* k3 a
1 =file("bank-full.csv").import@tc()
6 \% h9 N' ]* A3 T3 x2 X
2 =ym_env()
/ w( @, I8 q- }6 g: m* f3 p8 U
3 =ym_model(A2,A1)
6 b! n3 u& ?1 @, {
A1 导入建模数据,读成序表
+ q) a% W" L! n6 U- u8 B4 g6 n, v
6 a% \8 B/ V3 z' @
0 I: }* @/ C2 `- ?. a
4 E& O: W3 B# ^ O' f# t5 Z
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
. t. I; Y2 g1 M
8 |: l! F" i+ ~
A3 加载建模文件,生成md对象
* v/ A. A1 a4 M
6 X. c' v) d, m- X% `, E
(2)目标变量设置和变量统计
- }4 t9 {+ P7 S
数据加载进来后要设置目标变量
" I1 ~2 L9 i1 G s* ^; q
, S* F, W8 v9 x" a/ B ?, k
A
\6 _# ~* r0 W# ~1 `7 ?
… …
0 _* k1 M; O. p4 F J
4 =ym_target(A3,"y")
7 q a" w; R$ [! h- m c2 l3 ~
5 =ym_statistics(A3,"age")
) p& @" u! E, e% a
6 =A1.fname().(ym_statistics(A3,~))
6 j8 Y8 x7 m* ^; }! | F. I
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
& D4 g3 u9 S" ? W- P6 j( A
/ M1 L& V, D, ]% \: k
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
+ N; W- N1 L! e3 P' H" K
- @6 z/ M. {- L* c+ b
8 v/ d/ X/ v; l. b3 `" g2 i; Y- S
$ \+ B# [4 K& x4 ?
A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
% H- [4 I7 f! x3 P* I' j
2 ~. Q6 O( P r L1 e+ K6 ?- r
3 D- N# ?# L8 Z& {
0 @# ^) M# Q& H* x
(3)建立模型和模型表现
3 N2 s' ` v T' S( x; h0 h2 ^
A
/ V# U+ j+ [# G+ G# o5 u$ l
… …
, s. S" N7 s3 {, s0 }
7 =ym_build_model(A3)
; x2 z. X! U+ h& Y' i
8 =ym_present(A7)
/ ^# d- I6 t( m) a* H p8 t0 w
9 =ym_performance(A7)
4 c' @0 a* N% T! {
10 =ym_importance(A7).sort@z(Importance)
$ l4 z: N: W6 z G# b- o* Z
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
2 G" h0 c. r+ A! t% D' Y6 U6 J# {
1 _' `' g# J5 r& o) D$ _
模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
Y1 X* M9 K/ Y+ B( S( X
; `7 O- s9 K$ X5 w7 I8 _) |
A8 返回模型AUC值及参数
: V) O, F7 B4 N. z
/ H2 P [" v' i$ Z/ i
9 k6 f5 n! O* E( g
9 d7 _8 Z4 P+ I% U Z) s
A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
9 c7 i7 b5 b5 t) {+ F; e7 ?- }
# n4 J% R% ]- e" @8 t9 I
/ E* F' A8 ~& j/ w( e
" e: w: H4 c" Y9 X( ~8 }/ p
比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
# B$ y( F+ I5 U
# x0 k6 i ~9 C
( U9 m2 ?$ I- S9 D2 C" ] N$ {
+ q. u4 ^. y- J2 C+ a6 ]3 T
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
& p& u: _0 q2 S$ p$ ]
! o3 F0 U8 _! C3 ^0 |% G9 {
% d' [6 _- y- X1 h. T3 w! W) }
1 M- l$ u9 T$ I3 G7 }5 C* D: ?
(4)保存模型
/ L9 _1 O) e3 a$ i4 D2 H
A
+ V6 T) h& z+ n! i. {
… …
# L o) C P) q/ T- Q$ Y
11 =ym_save_pcf(A7,"bankfull.pcf")
8 N) b3 j# y! p* u9 i* \- u1 s
12 =ym_json(A7)
( i! t H) i4 s) p& Y
13 >ym_close(A2)
3 [/ ^0 ], l3 y" o0 C# _, [ d. A
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
! m' Y* V" z$ \+ T! _
* S5 w2 ~4 F0 r
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
: w9 `0 J4 L2 o" _
) V. `0 H. ]' w# ]& k; |
A13 关闭环境,释放资源。
0 b3 `3 a" C$ Y6 T2 L* K% x
/ B; ~1 R" j, Q) |# Q
(5)预测
" q! |# N" S4 I3 q# f
预测之前需要有pcf模型文件和预测数据集
9 ?: q2 E( m4 ^
) U& w" @3 D( a/ M# X$ p, t6 N
A
6 {% @3 [/ \- @4 k
1 =ym_env()
3 l. l" n* n8 w$ d3 f
2 =ym_load_pcf("bankfull.pcf")
4 }) U! H+ d G6 S
3 =file("bank-full2.csv").import@tc()
6 I: J. o# _2 k+ V) w
4 =ym_predict(A2,A3)
4 R3 i+ R1 f( T0 w4 C: ~. t; L
5 =ym_result(A3)
' G* ~1 V! S0 n
6 =file("bank-full_result.csv").export@tc(A4)
0 B; _& T# h# F
7 >ym_close(A1)
/ T1 _' t1 n3 h9 u2 y- S% ~& E
A1 初始化环境
( o3 s! ~2 t) b& y
. E! |% O" F6 N4 R3 V# g
A2 导入pcf模型文件,生成pd模型对象。
. T6 K r, k! P0 a8 {
_7 H; G c+ y6 E
A3 导入预测数据集,读成序表
9 o" p. B" v' d" `+ V, r# O3 Q- Q
3 h5 Y( w! L5 O4 z, ?, s) z# [
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
! B x! E% n7 n( N; P
5 v1 W) [; I- Y8 H- w Z1 d
A5 获取预测结果
( L; Y( t% v1 o- N+ Z# N* E f7 z
- d( U' B. ]1 |* s. y
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
! S- j) }, w+ w( x% g
8 |- b9 N; u0 M7 v6 C0 ?
+ A7 O0 i7 D. R& S: A7 ?
A7 关闭环境,释放资源
( A% V2 N/ i: F5 [5 d( s
1 i8 t; v1 ^$ Y$ F, e/ Z
4. 集成调用
8 K% Z- B5 D1 ?1 B* r# S
SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
" g: z. \* N4 p0 h- d* i
" B: f/ M/ d2 Q- {1 Z5 y
总结
' i; i9 x% T) r" a7 i( K
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
) M/ }3 \# L+ @& c" D( H( X" l
% @% F/ r8 ~% r
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
! p/ l: r$ w, E$ }& l
————————————————
7 q9 U( E$ J5 N! p, }% e& O# e0 H
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( R; w2 j# c) C
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
: X, j; u' k7 Z# U
) k9 s) e9 C3 A
4 C( W! v9 x3 h, [# r3 B, ?- P+ q0 c
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5