数学建模社区-数学中国

标题: 搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错 [打印本页]

作者: 杨利霞    时间: 2022-9-7 15:33
标题: 搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
0 L* @4 K/ @! K, t" [' L' E# X- F/ f; F1 h
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。& ^" Y6 s4 t# t# t

7 X: B: R$ F8 Z. e/ z, I下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。; y' k1 e, _4 [% i$ y- d1 t

/ T1 m" @8 c: U1. 确定目标,准备数据* p% C+ @+ N+ n: G* x: X
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。/ q& Q+ B2 ]0 j- ?

) ~  `7 l/ k5 P3 L" v- u历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:6 f. @6 R# N) J9 x* z
: [- J) p$ [" Q# l( D
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
; X  l8 Q  ^$ p' k  v; v: q& A# ]% V, A  [1 S6 M  j6 B6 j
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
2 J# A0 o5 ~, U) N! U+ ]
1 C) ^$ U9 H( o6 y# q! G7 Z" Q* A# m采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。9 ~5 ]% y( [1 e  {6 v9 x

6 P$ ^0 P, T9 [4 f准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
3 b& j- w2 k: A2 f- |. `
" m, M& C1 J9 [/ g9 V如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。( ^) ^; |: j* T5 p( F

# F5 d$ i! C6 Y0 s& [" B/ c2. 下载软件,配置建模外部库2 l3 a! i5 n, S# g8 |" q1 C
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
7 l* V/ E# \% N3 W0 y  Q1 {! }" |1 m+ ]2 @( ^/ D
(1)下载安装集算器(SPL)和易明建模软件
# Y1 o4 m. @) |+ b8 S集算器下载:8 k4 ~; |% y+ E4 v
“http://c.raqsoft.com.cn/article/1595816810031”& t+ Q" }: U1 p8 k7 G% q

+ T, w' f9 A, I易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
* v# n$ u# e) Z9 d3 J  \
5 n# ]4 H1 t+ x) g8 d安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
, U% Q  c5 u9 x: \) W8 ?2 Z" ]
; ]4 s# O; R% i9 a* T, D* X0 e- m% a2 F( ~/ v+ v

6 \7 m: X0 g! D5 ^& Z2 X6 d(2)在SPL中配置外部库0 L( \# Z( W  r2 e3 b- L1 H
(a)复制外部库所需要的文件! b# [- ^0 O; s! T$ G& u* u
在易明建模的安装目录下找 YModelCil 和 lib 文件夹4 t  m) r  }+ u* [
1 K3 ^- i% `. o* b0 w. L9 k) D# E6 M5 [
* d) C) ]0 x$ B/ y. o
( D) ^# `# u. n$ e% k" F- m
然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
4 D  W5 H) |+ [: b0 L' `1 ?7 [$ H  `! B6 R$ {! G3 v! P
建模外部库所需的文件有:- I  I# V8 {- H- W
1 L2 t# V1 J0 V2 X" }  E4 W
1>易明建模目录的YModelCil中含有以下jar和xml
8 w6 _. |0 x6 a8 F8 g
* F9 l: c; ~( v" i0 bant-1.8.2.jar
5 V+ v" f5 g6 }( G4 [5 c; Zcommons-beanutils.jar7 d# {. x: A5 R/ @0 G0 O
commons-lang-2.6.jar" z# x. y; M( i/ \+ Y
ezmorph-1.0.2.jar) e# z% ?% S! f
json-lib-1.1-jdk13.jar
: n7 _7 l2 F& k, O- ?* H% w' praq-ymodel-cli-2.10.jar
  Y' L8 k8 F9 e' R% r- A  _userconfig.xml  q0 {% C& G! \+ n0 |: `9 G' i
" x1 ~- @$ C2 `  c* q  N
2>易明建模的lib中含有以下jar
  ~. h$ J) g8 P3 L, }5 H4 R2 e
commons-io-2.4.jar
( U) y0 `; D0 jesproc-ext-20211104.jar
) |5 k% O: ~: ~, u8 tfastjson-1.2.58.jar/ {& O: G$ g! I5 c; T+ l, l
gson-2.8.0.jar
6 g$ I! f/ \. f0 Qjackson-annotations-2.9.6.jar
: m* z+ `4 @' ]1 c: u) ?* {jackson-core-2.9.6.jar- J6 j$ Q( U4 P
jackson-databind-2.9.6.jar
# e( C! X$ I: W. ~jackson-databind-2.9.6-sources.jar
" O; c! A7 O7 h9 Ajackson-dataformat-msgpack-0.8.14.jar
8 q* J, i+ N( Wmining.jar" F0 ]! J- \8 S" d9 m; k
msgpack-0.6.12.jar
5 A* [0 \! V) Z. p' `' r! mmsgpack-core-0.8.16.jar* j4 N7 m% ~( P& @1 n- q

& y7 L/ e3 k9 Y0 V6 w2 k  E" b(b)设置userconfig.xml文件参数( B7 Z" J2 P" X) X& s4 \% l  `
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数0 m" Q; J7 Z5 Z& {- h+ K
- f3 i7 K. [  \7 N/ l! I
名称        参数说明* M2 b) m- j! p' h* M
sAppHome        易明建模的安装目录
) L: m2 @: \: YsPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
6 ]- M0 }" [  m: k+ viPythonServerPort        Python服务网络端口$ ], l. c; T- e2 A
iPythonProcessNumber        Python进程数" p' h/ t) [  W/ r2 h; j' y
bAutoDecideImpute        是否智能补缺
9 u* H: D  o3 ]# ]- ZiResampleMultiple        重抽样次数1 E# [, t3 S0 |& Z
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。* n( E% x$ n$ e4 J  e; M

  q* R! A( x- x5 c, i/ S; w/ W/ k<?xml version="1.0" encoding="UTF-8"?>
7 |# a+ C9 c; q% t2 Y7 e' x<Config Version="1">( E2 L! M' [$ }1 R/ U( s& J+ ?/ {
    <Options>
+ t9 F$ B$ p* Q: j9 c        <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>5 }3 U4 v3 |- k* l& b( X2 v& O  _
                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>  j, I  j$ G0 M' }4 |
                <Option Name="iPythonServerPort" Value="8510"/>3 `7 @4 f- {% Z
                <Option Name="iPythonProcessNumber" Value="2"/>) P3 P$ e+ F5 H  B% @
              <Option Name="bAutoDecideImpute" Value="true"/>, Y9 s3 }* H% r
                <Option Name="iResampleMultiple" Value="150"/>                               
. j4 _/ S8 w) \* ~, D6 Y    </Options>
" ]: U$ j) d2 U</Config>
3 g8 Z' c8 L9 m16 d1 \6 j2 `0 L: N( u* g
2
/ q0 N- q2 ?5 Q8 l( n! I1 w3
5 T: t7 [4 W% E- s, H5 _( v4' f3 g/ M5 G0 A
5: d# @- o' m6 b% e( H/ [2 d, M
6
& C3 T9 n0 ]# z1 y1 m/ W7$ p; P5 a1 _6 Z: u
8
) _+ q7 e5 r7 I* G9
& q( z# t2 c* I" R& p8 t2 o10% [2 i. W2 f; I! n& R
11
, C# y& m+ M2 i, n5 {$ H其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
: j  a" K9 C: `  j3 k/ h  u" M" g
(c)SPL环境配置+ D4 V6 l- M6 _
1>. 配置外部库
3 f& w( j) w9 y$ ]3 @3 l
$ T/ a# y! N* P0 `% s打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。' V" @: m+ |- ~& B" Q5 _' [
) e- t  X! q4 r& ^
4 E$ w7 i$ N- y! e1 Y8 _. H" B
3 p* n1 |' F* C8 \& I1 S
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。( D* ?6 ~9 x" W2 O' N

2 \0 d$ ]: w/ Z5 q: \8 M8 u<extLibsPath>外部库路径
/ k" g1 {* |8 [% B- o* M5 ~6 s5 t# l/ I2 m# X, ]& V$ ]  `
<importLibs>外部库名称(可多个)
3 |: X7 `( e, ]7 s) Y+ D9 }+ s7 }$ p* _# r' {
2>. 线程数设置+ x5 W  A0 T5 _
* z* R, _+ j# L; y2 s
如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。6 D4 J5 ]! A1 _
" [6 Z2 A7 k! X# m
4 e' b  b) ^9 ?* C  c1 u
! `  L  K' d3 L2 j0 `, t
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。3 q- i' V3 ?6 m( i6 H" h7 z$ t% P
: `) b: T. O' x1 |9 p
<parallelNum>最大并行数1 T( g3 f8 J& n8 T( P% D
  b, _# ~  o* R7 q* J
到此,环境配置完成。
6 F: x: O2 v0 g# |/ p! y( @9 Q3 }$ P# t4 t. i) e- W" C4 ?7 X
3. 建模和预测) p* v9 y0 r! F+ s3 d1 Z9 U- m2 o
(1)加载数据
- q* U( b# ^/ z# o5 eSPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。* W. d3 P5 p( `# m- P

' m# v" @" g, e1 x! X* g设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。& T' o* D  N0 K- [
# @4 X* S) U2 x4 k6 k3 u/ B
& \/ ]$ D3 U/ S/ ~- S

: x& p8 g  s% Y0 b; H+ I文件命名为bank-full.csv;
; e- x1 a2 g2 D( ~3 {
) Z' D, n, {9 ^. g5 ?  ZA4 y- E9 M5 Z6 t  i6 @9 }  S9 z
1        =file("bank-full.csv").import@tc()/ p3 @5 ]( K) f6 G
2        =ym_env()0 V' B: {; c# J  h
3        =ym_model(A2,A1)% F  V1 k2 ]7 g5 T; p& R
A1 导入建模数据,读成序表
3 a7 P; u+ E8 I* M* z
+ B$ M8 f! z8 E; v8 l, X! h. h/ V+ K. r, I- D, J
1 ~6 Y3 ]# V, t% ~# p
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
$ H, _1 |$ ~8 g9 g) O& |" Q- U/ ?+ s8 l  T- ]) O
A3 加载建模文件,生成md对象, N; s& D, n; D5 n4 ?5 d, d
3 c; ~- l9 M- m4 j& v2 t+ f
(2)目标变量设置和变量统计: S9 m% N0 d! d; t1 n5 d
数据加载进来后要设置目标变量
! p6 g; p. _3 S/ N. K  V2 K/ F, I  A; M( w% i# z/ k
A6 m8 \3 F: x' I6 `9 T  ?
…        …2 H/ t# B/ X- ~; {/ S. {
4        =ym_target(A3,"y")' I, h3 V& _) Z& x* c
5        =ym_statistics(A3,"age")
# {' Z2 Q" @5 d  f% a6        =A1.fname().(ym_statistics(A3,~))$ m, W/ d2 V& l, k" L
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
) f9 n: h$ P& U0 s/ \2 x4 ~- E( N( D+ ?1 u) a4 X! H) O
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。% g) v. v! _% X/ \" \) A

$ t' y" Z0 c; J% @7 n! K/ L+ K9 l4 ?0 R" Z7 g- J  |
# n3 f5 k( c: c6 E5 K8 i( {
A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。& d" S' b3 ]3 G! I; r0 E
) {: w3 Y+ R, `5 B% m3 r/ @  _- E

% T6 J" w" ]' D7 w$ y
$ ~/ c! d$ E6 f3 s1 Z(3)建立模型和模型表现
( R2 S! N, _6 \/ q& V4 qA4 ^; w" v( q3 Y) @; z. l
…        …
& u( A* _$ [+ o# p7        =ym_build_model(A3)
6 v/ E3 S5 ]  ^8        =ym_present(A7)
: U+ d* }; q+ i+ Y9        =ym_performance(A7)
  p/ O2 i0 }: F10        =ym_importance(A7).sort@z(Importance)2 e$ t& _$ X  ?4 R1 t: _
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。. d& x$ |% c6 S  E5 d8 z

& O9 L! |9 g8 b2 }+ h" j0 c模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。- V5 U7 ^( }! v8 b( W

- h! T' w; ~& L8 F+ P9 eA8 返回模型AUC值及参数
. \/ q2 \4 `# V' P: F4 ~# S& v3 [% k% U+ F+ ^

5 \8 s2 w2 f' t/ y5 o. j- B' I/ t! G- \& q+ H" J1 M! ^1 V, f
A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
, L$ `4 W. |: A0 B) W; a1 }! ~3 l4 z7 v/ R0 `- B4 z

6 }* h$ Y2 L; a: k' B( R* J/ m8 i
% e4 Z% L# A& @$ C* u* w, b9 V比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线* b# J0 k; A; Y: s* u. w8 n8 S6 m7 s

5 I1 f, K+ Z1 c7 s9 y8 A+ K( d: U5 P, ^4 N( q
7 J" l3 a) C8 I$ O* I& M0 N
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
$ V% S( `" J. ]8 h8 v. c3 X; J4 o/ L
' d& Q9 L( S4 {) D" [- [: `
% `0 A3 l1 C  {- ~! S9 Z0 [7 u
(4)保存模型- h  n: k( I& R/ c
A
) A  @* g$ l1 b/ a…        …
6 o' ~9 a# d: r9 E5 R* I6 [5 }11        =ym_save_pcf(A7,"bankfull.pcf")9 _! r9 W* |- j% i3 X
12        =ym_json(A7)
# o0 u9 G& ?9 X13        >ym_close(A2)7 z+ {' c0 Z  M# ?
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
* M7 j! D2 s5 l, [/ N$ j9 V8 R. ^- N* U2 ?/ N5 e8 B
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》+ [* r1 `  g' c, H

. \6 h. a5 f3 V# JA13 关闭环境,释放资源。4 u+ |/ k" ~1 ?8 I) L, g
( O7 E' i7 N. C4 |9 @3 Z
(5)预测& T8 ]: F! F- r2 I. L+ z& I
预测之前需要有pcf模型文件和预测数据集$ |$ Z; r2 M: K# u1 m

8 k7 U2 F6 u/ f/ nA+ V! S. L0 @1 \# L" o
1        =ym_env()
- ~. V0 O4 `* T! s2        =ym_load_pcf("bankfull.pcf")
. o/ X( C# W7 x3        =file("bank-full2.csv").import@tc()5 t: T/ g- L' J
4        =ym_predict(A2,A3)# C" p6 Z% Z( o
5        =ym_result(A3)
' f3 R& o# s, {, R* Q" Z/ G" o6        =file("bank-full_result.csv").export@tc(A4)9 W; l" F/ H9 `: A: ^
7        >ym_close(A1)
6 C# X! e: V5 s8 i% u3 M1 g! nA1 初始化环境6 D% c3 m: e- t: v2 t0 E. F

& ~3 Y) _3 N/ E& t& \0 w- vA2 导入pcf模型文件,生成pd模型对象。
, f, y, N$ p$ b6 k' G2 x$ D+ d: `" a( p
A3 导入预测数据集,读成序表
4 I& }5 C9 l, }( Q# s1 H1 H' R; r# G0 n" z' ]. y& i$ z) h
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
9 ?1 t3 X1 h8 w  y2 V& f
- c, L- t8 e4 l6 FA5 获取预测结果
  N$ t1 v' D. d1 ~* F8 r4 k! c, f" |6 q& J
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
7 u& n# p+ }3 t3 M1 {$ a- Q; z9 O$ H! G
0 V  J, Z! M& v
A7 关闭环境,释放资源
% v: l: Q" M( S  B/ f4 F2 b
( k8 y* i, i1 O4. 集成调用9 R" I6 l' T/ u" i/ m
SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560' u5 s6 j7 M2 b/ B
6 q( k( n  ]( M% X! G/ {  |
总结
" h7 K9 i8 n. D+ A. G/ k* N使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
8 r% c' r3 b7 D" n1 f9 p2 m" Z1 F' Z$ S5 f; r
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
5 i1 y& f5 o+ {- Y————————————————; v. B0 z7 m  C; M2 ^
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
) o/ D( n+ ?; k* K原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462& I1 z: }: }' u9 A- A+ j( D

  w+ r' b! U" K! U8 F# \& [/ M, ~6 K% G" }





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5