数学建模社区-数学中国

标题: 搞 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 _! `! {$ C8 ^% 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& j8 _& 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) dSPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。( ]  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\ymodel1 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! O1>易明建模目录的YModelCil中含有以下jar和xml
9 W- g$ q2 i, L# z! e
" D* u% Q3 b+ R' w% U) i/ O% @0 Eant-1.8.2.jar( L% E# h! ~, ~$ a+ y# }
commons-beanutils.jar
% e8 S0 q1 Q3 Z9 e) C; Ncommons-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# Zraq-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.jar9 g6 L# l# S" p, X
esproc-ext-20211104.jar4 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; Yjackson-databind-2.9.6-sources.jar2 X) x( A4 }# N
jackson-dataformat-msgpack-0.8.14.jar4 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; KsPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.74 e; @5 Q$ v' k
iPythonServerPort        Python服务网络端口6 ~! y) ^) ?$ s0 O7 J0 z
iPythonProcessNumber        Python进程数
6 g* h8 G5 c% Q9 bbAutoDecideImpute        是否智能补缺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 [24 O) F* b2 A0 P4 A) y6 ~! m
3
- V  r/ B+ g8 X, P48 e) |0 z! I  M3 W, R
5
; O6 }+ W) A5 B' k+ q3 ^2 c  Q# n8 O6
" c- ~1 t1 V: [$ x% p7/ 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* L11
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 w1>. 配置外部库
' w9 J0 r- P. W2 M& }0 S0 P5 z& {5 B2 y3 @9 w
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
. k" C& ]2 [3 I% q4 X3 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 x3 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
A3 ^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 U3        =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 M8 |: 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  ?, kA
  \6 _# ~* r0 W# ~1 `7 ?…        …
0 _* k1 M; O. p4 F  J4        =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, ]% \: kA5 查看某个变量的统计指标,比如 “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 ?- r3 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' i8        =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( g9 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 HA
+ V6 T) h& z+ n! i. {…        …
# L  o) C  P) q/ T- Q$ Y11        =ym_save_pcf(A7,"bankfull.pcf")
8 N) b3 j# y! p* u9 i* \- u1 s12        =ym_json(A7)
( i! t  H) i4 s) p& Y13        >ym_close(A2)
3 [/ ^0 ], l3 y" o0 C# _, [  d. AA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
! m' Y* V" z$ \+ T! _
* S5 w2 ~4 F0 rA12 将模型信息以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 k1        =ym_env()
3 l. l" n* n8 w$ d3 f2        =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) w4        =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% ~& EA1 初始化环境( o3 s! ~2 t) b& y

. E! |% O" F6 N4 R3 V# gA2 导入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 dA5 获取预测结果( 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( s1 i8 t; v1 ^$ Y$ F, e/ Z
4. 集成调用
8 K% Z- B5 D1 ?1 B* r# SSPL还可以被上层应用集成调用,比如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