数学建模社区-数学中国
标题:
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
[打印本页]
作者:
杨利霞
时间:
2022-9-7 15:33
标题:
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
( O8 K7 b; o8 Q* m! F
; t: O+ H5 M. ]# }; N8 Q& Q
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
' z5 L+ q+ ?6 \
6 q7 \& k9 F4 u1 B A3 q0 D
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
, G2 I3 @ b- R* A6 z/ a: a
" }' M% k0 B% E; D# O; g
1. 确定目标,准备数据
- y; \3 L1 z. a: [! P5 K# W" v$ N& G
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
9 c% ?, T! X7 N! y8 J9 _ ]4 c
! T" b2 K5 T- ?% x
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
1 ~2 p) ?- x/ o7 ?9 V
5 Y m) Z3 r- q* i2 x
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
* k$ |5 h2 B5 q" T) l3 r5 U) v
/ g! k# ]2 j! G& r
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
% H$ N! K; V [
5 R7 U F+ \5 V! D
采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
7 }0 H* T0 N6 {( _ L1 v8 H8 R9 O
+ X' p4 y/ b) F
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
0 ^* r4 T; c- @( U; c4 B
3 N. Y- x4 U) ]" U* b
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
( T' X" z0 H+ P7 w
1 u6 O5 z. ~$ u. G4 B- H, y
2. 下载软件,配置建模外部库
+ Q& V+ } g# z6 u
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
9 q/ e2 L. o2 |8 }& L- m2 M
) e4 X6 ~5 P, s) Z. \
(1)下载安装集算器(SPL)和易明建模软件
- b) m3 B9 @$ ?& r; _
集算器下载:
4 s$ K3 |1 b- T/ d, u/ A. e
“http://c.raqsoft.com.cn/article/1595816810031”
8 l- m4 V! u! A% @+ }8 y, ]
) n! \8 G5 r) L9 A' n- j
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
9 u: A% \3 }% s! q s0 d/ y8 |
" A: ?+ \( T+ ~: E
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
- w- H! ~. X* _
& Y! Z8 F- s# G* j# r1 ^
( E; g! S9 M2 ~ {5 M8 a
, W4 I2 o4 S. J
(2)在SPL中配置外部库
. I' N! h' l: W* h% F4 Z k
(a)复制外部库所需要的文件
5 W: ~* \. I( t
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
3 W- y; S2 H3 X$ ^4 v
# }2 z, Z+ {% {: B1 s9 R' p2 G
% ?4 b: Q$ P- S: w
7 t. h1 I1 N0 C- H4 n- n+ I
然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
2 S. A9 ?! }% H$ N
9 S* Y5 p* u9 @* f. d/ y/ X
建模外部库所需的文件有:
" f+ p$ k2 D+ i
2 g/ y! @2 \! T/ K3 U
1>易明建模目录的YModelCil中含有以下jar和xml
8 W' o* K/ q/ A4 w( U
! a Q! b( S, F+ d1 t/ [0 S9 H
ant-1.8.2.jar
3 _* T; [0 Z' E0 t8 \( s# D
commons-beanutils.jar
& e+ x. f" k! ^
commons-lang-2.6.jar
# l6 X8 z' m/ n# s! ?
ezmorph-1.0.2.jar
; V$ i- M' L# J7 w8 i( T2 w8 y
json-lib-1.1-jdk13.jar
* p5 J7 V% `+ X/ S
raq-ymodel-cli-2.10.jar
" P! \% H4 `6 [. s" P: F
userconfig.xml
) a5 V. a. O' U. V$ r; b4 E
8 B7 [0 ~5 w8 r" B/ U" H
2>易明建模的lib中含有以下jar
7 B& b* F1 C5 U, _* x6 K" P
5 p( Q7 S P B, m
commons-io-2.4.jar
0 ~7 p1 n% U! b- J. j" i
esproc-ext-20211104.jar
4 L |0 \- A" V) O7 D7 _% F3 F+ C5 d
fastjson-1.2.58.jar
1 v, _& O0 j7 s' u5 h. _) Q
gson-2.8.0.jar
) t) j }/ i) L
jackson-annotations-2.9.6.jar
0 Z: s& m/ ~$ Z5 [
jackson-core-2.9.6.jar
; W- s+ S0 J( P/ x
jackson-databind-2.9.6.jar
. ^( j6 O4 r$ f/ L
jackson-databind-2.9.6-sources.jar
( A/ y; {/ Z/ M) l9 O0 r. B
jackson-dataformat-msgpack-0.8.14.jar
7 h( v+ ]8 m- j
mining.jar
! O( X6 L! M4 n d W
msgpack-0.6.12.jar
, n" |" k6 Z2 ]
msgpack-core-0.8.16.jar
% F1 a; y% f; {; F* i5 m
3 B: U. O9 R( L6 p7 l/ x
(b)设置userconfig.xml文件参数
% }( T8 w. b: o/ ~7 A* u
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
: {, l3 N+ T* a' i
9 U; H& W( l" e5 B! O! W
名称 参数说明
+ h ], P7 W+ u. K
sAppHome 易明建模的安装目录
6 T3 @: X" t! y+ z. T, i
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
' Q. K7 g' Y7 a8 T# K1 @% b" r
iPythonServerPort Python服务网络端口
5 N6 x' r0 O1 g' ?: y! ] D4 s6 h
iPythonProcessNumber Python进程数
) S( ^4 _- j- c: B
bAutoDecideImpute 是否智能补缺
" `5 Y L1 d/ f
iResampleMultiple 重抽样次数
6 E1 r4 A# l/ w# d2 N% N: W
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
& L2 z5 ~2 x N7 T/ C
5 P' I# @ Y& d4 q8 ~
<?xml version="1.0" encoding="UTF-8"?>
' x# ~$ A9 |. p# N
<Config Version="1">
" E; e5 J& F7 X# W
<Options>
6 i$ l$ D5 m8 I& b1 Q$ ^2 U
<Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
4 P; q1 w; D* t8 k
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
. z! Z: v* T: Q# [
<Option Name="iPythonServerPort" Value="8510"/>
4 z2 s6 p; X$ U; ~' I( |
<Option Name="iPythonProcessNumber" Value="2"/>
% y0 [# `' D3 A$ U$ w$ |4 u1 H
<Option Name="bAutoDecideImpute" Value="true"/>
% e* a- F2 _8 }# s- Q4 \' ]1 [
<Option Name="iResampleMultiple" Value="150"/>
! J$ O5 n2 L" L" }* A1 z( p
</Options>
. q1 n B3 C. I! j
</Config>
( F) Q) u1 G2 A4 X" ]- U( H1 k+ {
1
( U# w1 G9 e" F/ _5 v
2
- z+ } a3 h0 \% T# }6 }9 p( r$ @8 t
3
$ h8 `9 l+ P' \8 E4 y' y! J
4
& V+ l p; R ]9 D
5
9 `% L' }4 Z( i, u* [. `: x
6
! I) n' S4 M# l. G3 \1 h/ f s
7
/ M, m3 U C- t% ?
8
# |) t" f' T7 O& F
9
2 u1 o2 Z. A# `% H' g$ z% f, i
10
) \0 V8 z$ P( K, W7 P# j, E
11
/ r4 J; J+ N( P- e0 v$ X
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
' y1 |( J1 e# `3 J( y7 M
: G9 O0 k# ?( Q, R
(c)SPL环境配置
1 Z& T$ t" Y- R
1>. 配置外部库
: e! i8 B& { U7 J2 V1 ?
4 m2 Y4 D' |2 ]+ n
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
M/ t5 }+ H. h3 c: u0 w0 g
0 X/ J7 f8 W5 P5 g: Y
1 U; U) z6 H/ o- ?
3 |* U* }& ]; {+ _1 z
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
& y6 l! {8 n/ C9 p- v( }4 \
! e9 o; D3 b5 L) W
<extLibsPath>外部库路径
3 }2 E7 ~. ~7 T9 _8 S
3 W0 l8 W$ r' P5 H, Q
<importLibs>外部库名称(可多个)
# Z$ F. l# f5 U9 p' [
. _: ^+ _) q4 {* E
2>. 线程数设置
8 e9 @2 _5 i9 |
3 w0 H7 y" r( h
如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
1 R: M" A i: D
9 w7 u. C" n7 ^" j6 s, J0 @- h8 B5 y
( f6 X; `) l6 z
& K% Q4 y; f+ h7 `8 m6 J
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
6 `. a* G2 j2 ]
& i( B5 y' R' m* w
<parallelNum>最大并行数
2 u2 @3 c; ]) ~4 z
. q/ S9 W* o ?5 x+ R$ ^
到此,环境配置完成。
; P) W/ f5 p# e t. H* G9 h
1 G# _' U& c# }& x9 z5 ^& k% [
3. 建模和预测
4 G9 o8 ]1 g2 r# G) C: w
(1)加载数据
" t, ^; H# @- i& ^$ ]7 h
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
0 ~/ [ u i2 n" G, C6 ` o
' Z9 G- l0 R. `
设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
9 D5 {$ U; d" }3 z
# h& L% M) V% ~7 ]- _( {' [9 i4 @8 w
6 Q8 v% @! s; n' a1 Q. D7 G$ F
+ J, ~& j9 N) s v
文件命名为bank-full.csv;
- a- E( h" W" Z% U- b9 t: c
- C+ i% }' i! G3 Q; K; z% H
A
" t" b3 M* x$ P: j$ C6 J
1 =file("bank-full.csv").import@tc()
2 `$ E; ^& }2 J" n+ B1 Y9 {
2 =ym_env()
8 k" W7 c: f* |
3 =ym_model(A2,A1)
+ [2 W7 c# Y2 N7 O5 `
A1 导入建模数据,读成序表
0 Q C. A7 }* z; a1 n% p
1 G* Z0 \4 e; }: k
: S: R5 J+ l0 U( o9 \4 Y* X- @
- Q0 E1 P/ J9 p; t5 T
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
. u j& {1 d4 z* D% q5 d
* |; [7 b; R- J
A3 加载建模文件,生成md对象
7 T, X. L6 @. ]) {0 I/ G8 ?
# S8 W: l) h) N6 Y8 r
(2)目标变量设置和变量统计
( G- K$ a1 i; _$ G+ L1 W8 Y6 w2 T+ f
数据加载进来后要设置目标变量
$ V: Y7 X. u6 {+ Z1 s& k) z% z
2 C' M: O' _' N) ~9 ]7 Q2 c- g/ q
A
. c( Q2 f2 H' r5 {% L1 e5 _
… …
) D5 l% P* b! @6 u! x
4 =ym_target(A3,"y")
3 F X" r9 f6 {) \' R7 _
5 =ym_statistics(A3,"age")
' z# d3 a6 B Q
6 =A1.fname().(ym_statistics(A3,~))
3 b( |5 u/ E k. P3 i
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
7 I& |; P2 p: ^- E( C# O/ T& V8 Z, K/ ^
1 [0 b& C- b: p9 u3 v% A5 |& L: B5 w% b
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
. f1 d( r6 ?2 v4 A& q# C, r O6 X9 H
$ c0 v0 k B* R" k3 o
* `( d' _/ p; }! Y
2 y. Z* }3 r/ R; V1 z
A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
' F# K. h) e N$ M! c& g( C
0 ]# U0 E& }; U3 T
' z$ _+ @9 S9 p$ {! u2 F7 T" }) y
5 v/ K. M: ?+ x: l1 H4 V& I0 k. Q
(3)建立模型和模型表现
. E1 I7 `1 \& x e* g, z5 ?
A
* J1 ~0 \/ Z. O2 e% `+ x! \
… …
0 U' ]: r; J8 O, k6 V& X, m
7 =ym_build_model(A3)
v* B; C- p7 b
8 =ym_present(A7)
& ^9 y. ?* b$ }8 z% W7 B
9 =ym_performance(A7)
) |2 X7 w% {, L& G8 q& H
10 =ym_importance(A7).sort@z(Importance)
4 `8 Y$ D% h: e( L6 k
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
- N# h8 k9 M6 a! t( g0 v
5 I9 Q9 y8 u6 w9 Y5 p2 G4 u' p- V
模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
7 F) r' S7 Q) m9 i$ U. o& M
6 O" J$ M$ `- j8 D6 c# l" K- Q
A8 返回模型AUC值及参数
# S, X* D% G6 b: a* e {
4 q; z6 T- w+ u6 |' \! K
* ]6 k; _" d. b6 o) _( `8 M, A$ A U
9 X, g7 z+ |7 g8 W# Q
A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
7 R, h1 L) C- m# J( {! u2 P0 T7 [6 g
2 D( r8 l3 y5 O7 s. z0 O8 Z* q
2 _0 d# L+ j! s5 S' y# T7 r* g6 v
# E- Y; T) F1 S4 e9 B
比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
7 Q& ?% j; L, _# v- f
E% f+ \* U" u L% |. s
* ]6 K! ^6 k6 p/ C- e
) j) z n& D0 d! D) \
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
$ L$ _. k: j# y; }
B' M; K7 ] T- `5 h
5 @' P" `3 A: I& `) ^! }
1 m* X7 c* v6 M; u' {
(4)保存模型
# k$ r) b9 Q$ @; t
A
5 e1 @( x! C9 Z* J6 u
… …
: r# Q& W I' j3 ?
11 =ym_save_pcf(A7,"bankfull.pcf")
$ E2 b: A, `5 v F8 t. \, e* e
12 =ym_json(A7)
* J) z! t1 }( D
13 >ym_close(A2)
, b, F2 S8 Q, E. b- M' K
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
* D" b; N: J) p: G9 [1 {, {( a# }! H
- ^& D% v) {3 u! Z7 ]2 ^
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
0 z) ], ]3 R! ?
3 e! f4 @ |+ g( ~ I/ f! W
A13 关闭环境,释放资源。
+ m1 m: n# b9 X
6 s! `* q+ R0 N* C9 I. F r
(5)预测
. W$ c2 T5 w% h" o3 ^) j' L
预测之前需要有pcf模型文件和预测数据集
9 ]: v3 v+ H1 d( `; p7 v* H
/ k( o2 R: U- O
A
; R4 Z5 W8 J! } ?' {& `0 t
1 =ym_env()
J1 ^, R* V, r! p- c
2 =ym_load_pcf("bankfull.pcf")
$ ~' ]: b! C4 _6 O3 f# W' j
3 =file("bank-full2.csv").import@tc()
$ W, n1 H; g( p% o- [4 D
4 =ym_predict(A2,A3)
v& l0 ]/ |8 n. A( H6 h4 x
5 =ym_result(A3)
5 i- e4 q' ~) N1 K
6 =file("bank-full_result.csv").export@tc(A4)
2 [+ y& |! c% q6 j/ A
7 >ym_close(A1)
& Z& N4 S" b- o. z9 W1 |
A1 初始化环境
9 @- y; o* C5 A) v9 ]
D3 a$ H( S1 D
A2 导入pcf模型文件,生成pd模型对象。
0 O6 W+ K5 y I5 l' L
+ f) s8 A5 _. V" f6 n1 L5 m* f
A3 导入预测数据集,读成序表
5 D2 a, e- b; K4 g9 H
/ P* h z" ]: e7 ]
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
8 O; ?7 b2 h7 i' `
7 T7 \- q O5 X" q* ?; [3 o
A5 获取预测结果
& Y2 Q i& z/ x& Z; \
# E1 N; S# b2 F0 G; s: F/ y
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
" J7 X- c1 J9 X1 @: ^
: ], h- r4 y' C9 N7 S' ^3 }
( b p6 ^: H: f
A7 关闭环境,释放资源
0 d- a0 N1 w. n: G
4 a; ?1 F" n& W( P! T
4. 集成调用
' u; R W0 q4 a" A, w
SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
' d' z3 ]9 T6 r5 N+ u
& H2 O, s# C+ b. \& r0 O
总结
% F; @6 z: v; s8 g2 v
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
+ n& L( e# @7 l: ?
2 K, j4 j4 s, i$ U
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
3 d8 |+ K; B2 E G' i
————————————————
1 M) | K. [, \- W/ Y
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% t" i) R8 n) J$ f: `2 b$ [) ^6 w
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
. P! g. m, [3 T8 o# a! R9 c
7 E( |! q, G; H* v6 y2 w1 M3 t8 C* R
m# w1 z Y' X% B
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5