数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-7 15:33
标题: 搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
8 \2 v/ X6 X3 P0 z5 L) C2 L- l/ a, `
3 e  c' O1 s& [/ q3 o可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
! c6 N+ C* c( Q% _
: V& e- N5 S+ P' Q下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
/ k1 L, {! ?3 `9 J  L8 ?  u
/ Q* X+ W) A/ Y1. 确定目标,准备数据
1 b$ N, g' g3 Z; Q$ M建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。+ G/ G* _0 X9 Q1 _( q7 S3 i

4 {- x5 [- l: X3 O5 E" y历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:$ V1 `+ t5 Q/ f
) e* W  W6 k5 w
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
9 D( Q9 \. @$ s5 ~/ g, R/ s& E8 R" G9 K! h
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。1 L+ B/ O5 w! W

+ T' J4 v) x* D7 Z采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
- j1 V# j" B, V% E# Y% l$ J* v( m$ _/ S) K8 f& R
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
; X' \- e& K! G$ H0 w, T6 M4 T# m: L9 U
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
9 S9 _! V0 H$ ^- }( P# A3 K) I6 V5 N' }6 p# J
2. 下载软件,配置建模外部库8 c1 K, Y6 a  e, Q# e1 c
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
1 e) O1 U$ i  P
) K8 ^) i% h7 i+ X& Y(1)下载安装集算器(SPL)和易明建模软件
: U3 v# v4 h4 h* x) R1 o集算器下载:
% C. b' d2 K, c& N“http://c.raqsoft.com.cn/article/1595816810031”9 Y1 Q  A0 V7 I6 h# n. o5 ~

; m, ?2 r$ z1 T& U8 t易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”- q' i' [7 C0 V8 a/ B& c- d( W
4 {0 l  r* E( b9 e2 q; H9 y
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
0 c0 J- U# J$ B: \9 w! \$ V
3 Z* b7 a" q2 A) }
, O' k5 q9 T$ X& `
/ b8 m+ t- u  L. n" f9 U(2)在SPL中配置外部库
) D$ U: f  @' M  V. S$ Z' p8 U(a)复制外部库所需要的文件
) T, s! z' n2 b( k$ c2 [在易明建模的安装目录下找 YModelCil 和 lib 文件夹
: b9 C- H* m) F, |: o+ H
- T) g3 h2 ^& G3 Z+ e$ u. j  V
( V# r( G  [0 H: L. w, ~/ @
2 i9 S3 i6 S1 S+ B然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
6 l2 p% H9 O1 {& \3 _: X4 D1 Y/ q
建模外部库所需的文件有:6 x+ `8 j  ~& E, G1 G" D- z
5 ]* Q) R8 q4 H" v% P" D1 W$ m
1>易明建模目录的YModelCil中含有以下jar和xml
# d; d7 n- E% C6 E$ E# z: H/ C+ R( L6 o7 c& E% c/ H( x
ant-1.8.2.jar5 P) t* G! D0 m6 s
commons-beanutils.jar
# d0 b; ?3 z7 y$ {$ ?$ P" ccommons-lang-2.6.jar
. N* ?$ R' t) V5 z* D+ Q" H. S* Bezmorph-1.0.2.jar
( P( B; p! D, c& ]2 K( A6 I- p7 _json-lib-1.1-jdk13.jar
& f5 ~3 b) y3 _. P: n8 a$ u5 d- k) braq-ymodel-cli-2.10.jar
$ n8 j! _# |9 J9 f% q8 F" E. g' H" fuserconfig.xml
1 _1 w1 @# I/ f7 @% y* n' f% v) [- B1 `% p5 E2 Q# V2 V
2>易明建模的lib中含有以下jar7 a0 S* }4 d2 z. e& d# U+ H* O' }, n
9 @0 P6 A- E$ V; `3 C" g
commons-io-2.4.jar  l+ K2 `, j" b/ ?5 N0 [8 ?
esproc-ext-20211104.jar
+ a9 ~3 Z1 N6 r: Jfastjson-1.2.58.jar
) K9 b" g2 T" n; z+ D9 `* }gson-2.8.0.jar5 j' u  C9 P5 d1 H6 Z
jackson-annotations-2.9.6.jar5 Z6 t) }/ w- ^( w
jackson-core-2.9.6.jar
8 j* f. H) N" Y+ w% r3 W* g& ljackson-databind-2.9.6.jar; S& C, b1 Y6 J/ T& E  U
jackson-databind-2.9.6-sources.jar' \5 j) T4 Y/ X0 r3 H. G. K
jackson-dataformat-msgpack-0.8.14.jar. {* i8 d7 _) v7 t; i1 o' i
mining.jar
9 l/ A$ y+ e. d" xmsgpack-0.6.12.jar& B0 O/ z5 X6 o) _
msgpack-core-0.8.16.jar2 k3 D$ [. c( \

8 `6 b4 R# y# Q1 U- ]# N' Y* H3 @(b)设置userconfig.xml文件参数. Q. H0 k& z; I5 V7 ^" R! Z7 E
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数; I5 B$ d' [! r: u" k

: C6 R( @' t7 S) `1 V) u名称        参数说明9 Q" B& B6 f' i7 U/ _
sAppHome        易明建模的安装目录, _% h9 ]7 T7 D* M. s# s# R
sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.79 y) y: W: i0 P5 Q/ s* s5 X6 \: T; ^3 K
iPythonServerPort        Python服务网络端口
- h# t2 G( i9 P. {+ z) H  f. wiPythonProcessNumber        Python进程数
( n. E. H9 q1 x5 N+ `bAutoDecideImpute        是否智能补缺$ O3 {- f( ~' }) a) S7 D
iResampleMultiple        重抽样次数$ G( v$ o' Z9 |2 z
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
6 b+ e8 E7 A7 c4 n
2 \) i' h4 S6 A/ H$ X<?xml version="1.0" encoding="UTF-8"?>
- A! ~& `4 C( M) m1 Z% y+ o: b" \<Config Version="1">0 W& `, B2 b) N. s0 i* F0 t
    <Options>. _$ T# K) L! F2 A5 c" n
        <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>+ h  `2 q1 H8 _# k3 t2 s4 O
                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
* S8 K9 b4 @+ d3 s  L6 A4 _1 c                <Option Name="iPythonServerPort" Value="8510"/>
9 }+ u/ w# B1 K1 z                <Option Name="iPythonProcessNumber" Value="2"/>3 Y7 n! [3 W) T* {; p) g
              <Option Name="bAutoDecideImpute" Value="true"/>
0 }4 x. k- l& [% Z, A                <Option Name="iResampleMultiple" Value="150"/>                               
0 V  C* \( X8 D- J6 i& Y    </Options>
. W# c$ k% @( ~</Config>' z7 G; g; T$ _3 n( l
1
& Y, Q& q( L: ?- h% ^5 ]2' @- X" Q$ b8 v" E/ Q) |6 }
3% ^2 }6 v0 z8 n5 r& G' N0 G
4
; x& J0 M2 }& F5 M* i* g; F: c5
. l3 D9 @: D/ A. ^: i7 `9 G6
8 |1 f! g" B! Z: |8 R0 q2 ~. V' Y7
8 Q" q9 C( T9 s& \) r88 g( b; @3 b1 l0 F- V# M
9( r" e. K) Q* E/ a4 k
10+ H5 B, G5 t7 N& n1 O. c# o; ?
114 v& S3 e. n! b! d2 k
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
4 J& }+ N: B( U& K& V! Z* }/ S1 S, |# R6 F/ L
(c)SPL环境配置
  K0 Z  W( k4 q2 ~1>. 配置外部库2 U5 O1 p3 c6 X% [

0 z, G9 z6 g4 i4 G1 G打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
- a9 S  E0 R+ b4 T  X. P& k7 A+ s' `" v+ `
( W  s) _2 G3 g3 }

. P5 h: z' s" h在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。: ^/ |3 [* o5 ]
( c7 @; A& N7 C* s
<extLibsPath>外部库路径
+ Q0 _. `- x9 N+ p9 k1 S# ?3 x" y- L) n! t* s3 R
<importLibs>外部库名称(可多个); N4 e7 i: V8 I, V
5 z8 _, N) J4 n
2>. 线程数设置
( n& s3 ^$ Y; }9 |$ F8 L
# f! N! K  o2 }( j如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。9 J; e' |9 e- q% r: f
) G3 P' r  \: _

0 J6 Y0 o6 Q4 k: O* l" @) @. I+ ?
; I2 j! r# M) a在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。% m: ^2 r3 d  p, n% }+ v, x/ M

+ r, m: m* f8 k& g% b3 U/ O<parallelNum>最大并行数; s( `) W5 ]' c2 d

' _/ \' ~9 G* n: F+ \. V到此,环境配置完成。0 F+ B. ]% p4 y

) Y2 f' z; T" _! E' d9 ]6 G. G% [3. 建模和预测* @) Z) z- ?4 j4 c; ^
(1)加载数据
% T4 E7 {* S1 z/ USPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。7 N) J$ B) o2 E* L% t, H7 Y) r4 F

, N; A1 ?* T2 D! M4 J% H设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
6 v* F4 y# T4 \/ i5 t/ m
* R1 K: Y, _5 e; ~
: J$ N3 p) s9 G5 B7 P* Q: k1 `
+ `1 Y+ [/ @% q- T+ \- y文件命名为bank-full.csv;
6 V! Q) f4 O. ?4 l- r& @! H4 ?2 N3 K: U/ Y$ M
A
& o$ k9 Y! L0 N$ k% o3 I) e: u1        =file("bank-full.csv").import@tc()
0 p/ P# x% D8 f- i4 q9 b2        =ym_env()
8 ^5 Y- q2 W; p0 Y$ q7 ?9 U3        =ym_model(A2,A1)
0 ~9 P; N1 o8 w9 {( WA1 导入建模数据,读成序表9 B8 V+ ?" @# Z. L) ?  N- D
9 t$ j- Y- W8 _, q
4 L% s7 n; B. r

1 p3 D* Q) M7 ?A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
$ v+ S3 J3 w% P5 a& k. R. W$ y$ E% r1 R
A3 加载建模文件,生成md对象
6 V4 K- Y, G4 o2 `. t& b
8 V5 A; R) }0 @3 F* L( N(2)目标变量设置和变量统计3 F7 g/ S* ?9 Z" A
数据加载进来后要设置目标变量
7 k, q) b" `5 f" w+ A/ ~- L- F; R+ `, J& q  _5 k' f
A
7 w% k$ d* [' z6 D; r…        …- _1 ?3 V1 V7 n- \* [, Y0 P
4        =ym_target(A3,"y")$ x' V; P( `  r8 M
5        =ym_statistics(A3,"age"). |- ]7 L( d+ P4 D/ I
6        =A1.fname().(ym_statistics(A3,~))
1 d  A& K4 o6 j7 V' \) cA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。8 Z3 w: `% p) U0 L3 ~% B
. e6 j5 @! R2 e2 m2 l
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。$ f+ b. S* V$ d' e5 S% c
. O  _8 I$ Y; V2 o+ V5 W+ `/ y

+ T# R! I- D/ ]0 _  u! {+ o) y' L3 ?
6 H1 I% U* P5 S$ O5 ~, l( D6 j6 |A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。: T0 s/ H9 _% S9 a
3 q" h6 |) p" R; k; j! p2 d

1 z8 w- W5 m+ d# j5 R/ `+ [: A/ X5 f8 `$ s0 J- ]( e
(3)建立模型和模型表现
" B  i7 V0 E* u2 W" o5 pA: h+ S1 }# n# `
…        …: y5 ]! \6 Y2 \' F* w+ F/ m2 h8 S+ K
7        =ym_build_model(A3)
3 \8 y6 e  W9 \8        =ym_present(A7)2 i; c! T$ o) ?1 T& D# z6 n
9        =ym_performance(A7)
: U+ y; o. S3 X10        =ym_importance(A7).sort@z(Importance), e. ^% O1 j0 c* j
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。6 k3 V* P9 R) }9 z* N/ L

* ^$ U8 A! ]5 l; R; _" a模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。3 P) {+ k7 H9 B( A4 V
# c/ k. n  Z! P" m
A8 返回模型AUC值及参数
5 e# _1 h, |: O' c' ]; r. j+ e# N7 H2 L5 p7 f5 Z" W
6 ]% ?$ I! m  n4 G( f* E

* j) `) T2 N+ sA9 返回多种模型指标和图形,诸如AUC,ROC, Lift……: |' C2 g* }! c! Z5 I
$ J% F+ d. H1 f) e0 c. P& [
. x' b8 O0 i9 p1 f# N! ]0 I

& s& w- g" H) ?% Y! ?- U& x. u4 P比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
. u7 z' l- \& z6 j! p" T& N" D3 x* J( o" v5 f

9 E9 ?% V0 j+ b; W* [2 B
6 W6 x1 J. }3 K6 y& `A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。, z. c) ^2 E8 M0 b  T

6 j+ ?" J: o& c; T: i6 B7 v/ z& l: [* |" {4 D/ D

, x8 w  J' ~% t$ s$ G. O, P(4)保存模型
7 y* G. D' u8 r/ |' z/ G+ Y3 ?A
/ C8 J9 G. Y. B…        …; t* O/ @* L! @
11        =ym_save_pcf(A7,"bankfull.pcf")
9 W! E+ ?" A" L  M4 t12        =ym_json(A7)2 _" S: C" s8 U5 [. g) B0 F
13        >ym_close(A2). V, d7 Z4 N1 Y% \2 r, L1 N
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。& j- H% i, H6 h
4 U0 W; n# j: T/ q1 l& }
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》' u, C9 ~% b6 |; b0 u

2 Q* [4 W! c! {0 RA13 关闭环境,释放资源。
! m) I8 D- }! Z  r: j: u! b: M
) t4 ^2 l5 O/ I- X+ U(5)预测
! |& J$ [, s8 O5 y. F预测之前需要有pcf模型文件和预测数据集7 ], R/ d/ p+ j+ t% }) G6 `0 |# `
. m6 a7 Z# t  C! R$ Q! u
A
& U. \; k9 e% B: N* U. G0 k: u, u1        =ym_env()
/ [; R; f" w, |7 w4 T) [2        =ym_load_pcf("bankfull.pcf")5 G: x- `3 g5 O' E/ `$ v
3        =file("bank-full2.csv").import@tc()
8 O% \1 C4 P+ \4        =ym_predict(A2,A3)8 a) f- X) C5 |. D
5        =ym_result(A3)
' S0 Q6 m, K2 x5 P' @9 k0 h! i+ \6        =file("bank-full_result.csv").export@tc(A4)
# n2 T5 L; }+ ~# c( t7        >ym_close(A1)  t+ y4 n5 D2 u
A1 初始化环境, W! F8 s5 w2 j* I
/ ?; O. s/ G* z/ {) O
A2 导入pcf模型文件,生成pd模型对象。
  A1 f4 ^- u& F4 g9 `; b7 n
. M6 [* i  K/ |3 v" w- c/ j0 mA3 导入预测数据集,读成序表
5 [5 r; ^6 K7 ^/ V1 ~! _* D3 G; v: L' B/ r0 q2 t: Q+ L
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
7 H# Y3 Z( Z' s
; V# A! X8 G4 g) k5 ?. EA5 获取预测结果* c+ i* V" R7 D. y( G) c6 K0 f* g

; m8 ]* ?' S* I/ J6 |7 wA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
: k  T- Y1 l0 z* E- X8 D
' |( x# o0 ~9 ]# g
$ d) r3 {& I" t, G9 u" CA7 关闭环境,释放资源: `& H6 G0 n9 z$ q6 R
) x2 q# r0 a& ?& t2 r) e0 T6 h
4. 集成调用
2 U' L1 r3 U6 @0 V( y% eSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560; c6 P6 }- l2 g
/ D' g0 i- O1 i% A8 U; s5 M
总结; ^  j" y2 F8 e/ x+ E
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
6 s3 J6 u$ \3 N7 W
; U  n, H$ p' k( W0 u0 T3 D4 ISPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。4 R! y3 X4 j  m" @$ @
————————————————$ g. Z3 e5 n/ Z8 L# K5 f& P5 [% v
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ }. H/ h5 X8 X7 u5 B" Y
原文链接:https://blog.csdn.net/weixin_39709134/article/details/1266984629 q, b: ~5 A! b: I

3 H! b5 R* R6 j+ v3 c( I9 Q& h# F% J7 S





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