在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564449 点 威望 12 点 阅读权限 255 积分 174558 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
: K; ]' B: Q. t, f3 ~+ p- J" S # k ~9 e! o9 F" M# S# A8 r- @
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
0 u/ d* A O, b5 l 7 l" q* V# f* r, w' e
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
3 C" c. [ }9 ~. r! ^) y2 C 6 S* |. U! T: H5 _0 `5 W; }
1. 确定目标,准备数据" G6 M! c2 `6 j5 u
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。9 P7 u+ j5 U/ P, o" R- q
' o P: D/ ]+ `+ Y, Q
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:) W# O9 J( u# i2 F u
. r5 m @5 R( t/ U2 X4 ^5 i- X 首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。% ]% U. R2 u% ]. j# U. }1 Z
; A. `# N$ P7 i( o, r* N8 S
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。% s. F1 v- W1 T# \( A; ?
! G% G( x& J/ X7 N7 C 采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。- z$ s. h5 z2 n& |
4 s% y& F4 K3 R1 q
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
4 ~9 c+ ^# m: `; S n- g. N4 {7 U0 H$ w
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
0 J, j+ I+ Z( G
: A. w- S" T5 J9 R8 U* d% n& y 2. 下载软件,配置建模外部库
9 H7 @7 |: r. V" e; {, l SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
2 n6 r2 T5 y2 `( s6 M# J$ t1 j ) o5 ~" i9 L; x) X' l+ y
(1)下载安装集算器(SPL)和易明建模软件) C, S' P4 G D! W6 |
集算器下载:3 L) K+ I6 Y, S5 v6 @" @3 H% J
“http://c.raqsoft.com.cn/article/1595816810031”" J% f5 b$ }6 K
, z* T. W9 B' D# a: Y9 j+ c" `: ^ y 易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”2 A. w7 @3 h. z3 r* }
6 h1 I" W/ }$ }. ]. j- }, w1 x. h 安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel& y. x# _+ y6 o8 d' d$ n! W. M
2 J% P- ]3 H% ?% f; N) m$ i
& B! u3 K$ ^7 R* {: C6 E - q* l- ^2 u8 D1 W$ C/ p& z' j! |
(2)在SPL中配置外部库$ h B% r' ]& \% x7 r5 h5 H# Z
(a)复制外部库所需要的文件0 b7 a9 T2 m0 ~$ x7 j$ s- @
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
% w! A( O& o ]: [7 @! z 1 l6 M9 N( [3 z* s; s
: r7 ^, y* A" W5 A& ]. ~. g
' @+ Y/ A( \5 s8 _: E( f 然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。" m7 R) f$ d) }" a' |8 Z; {
! ` o' `) F/ @1 ?* X9 M
建模外部库所需的文件有:" @8 K+ j* q: c. z
7 `# W4 e+ y, w8 @
1>易明建模目录的YModelCil中含有以下jar和xml
3 p% H0 Y- N/ Z9 J & R# b# M+ J k: f0 x$ Y
ant-1.8.2.jar% q/ j6 U7 I M' [& h- ]
commons-beanutils.jar6 z( O+ z) e9 h( i
commons-lang-2.6.jar+ h2 Q( d1 o' ]. J3 m0 \% d! T% A
ezmorph-1.0.2.jar
! b( D3 S# f" b/ j* _' I json-lib-1.1-jdk13.jar, O* T: q+ i/ [! e+ _3 V
raq-ymodel-cli-2.10.jar
/ F& z# ?$ O W0 X userconfig.xml
( y% o0 F9 K' V6 T* {1 l) ?( _ # e$ }6 z# c, P; R
2>易明建模的lib中含有以下jar
3 c% a9 m/ _) @/ {( E
2 S+ d& H: f; u- K8 L6 h" n; r4 ^ commons-io-2.4.jar& ~! _* u F$ @, ?
esproc-ext-20211104.jar! s% u5 Q4 T" D4 j+ @/ o+ j
fastjson-1.2.58.jar. L' [8 n, G& }. d
gson-2.8.0.jar- f) c4 Q4 Y5 n
jackson-annotations-2.9.6.jar
7 ^5 ~5 Z! ^) U& y$ K2 \ jackson-core-2.9.6.jar
( b, C4 ?2 y" M X( b9 i, ]3 z4 ] jackson-databind-2.9.6.jar& G" u7 T( ^! @9 O7 ^
jackson-databind-2.9.6-sources.jar& }8 E! g) c x( }/ T; y) C& ]# L
jackson-dataformat-msgpack-0.8.14.jar% I7 m8 V9 X) u9 w
mining.jar @( C: q1 s& H% O0 u8 S% K
msgpack-0.6.12.jar/ e9 {- G) N* M1 l
msgpack-core-0.8.16.jar0 {* h- z) Q7 v; R
+ | ]( i2 T+ T. Q, T4 } (b)设置userconfig.xml文件参数
! D7 u+ v2 ^, q% w l0 k 在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数8 D! x. c" o' q3 H- H* \
( V$ P; R9 ]+ g3 u ~1 J
名称 参数说明
- ^1 C; N$ E1 }: b( o( M- J sAppHome 易明建模的安装目录3 z6 C3 n- Z- l5 z
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
1 l0 [$ D7 h; g8 }3 r9 s1 [ iPythonServerPort Python服务网络端口
1 I2 x& Z$ K; i0 I iPythonProcessNumber Python进程数# C' T1 P( f8 I, V2 Y# ~
bAutoDecideImpute 是否智能补缺 R5 k* F! ~) ^/ M0 n0 j3 S
iResampleMultiple 重抽样次数( _1 h1 O# z+ n- t
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
5 p) i0 [ b# ?2 W ! T' K8 p7 o7 ^. A
<?xml version="1.0" encoding="UTF-8"?>! z' c& a$ \( O U, l" \9 |
<Config Version="1">! C8 F# G" D! ^
<Options>7 s5 A$ l# Y n1 d
<Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/># o( k: _! Q" U
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>0 d/ {" S8 O9 T
<Option Name="iPythonServerPort" Value="8510"/>
4 T- P0 F" }. T- ~* N. v# r( X <Option Name="iPythonProcessNumber" Value="2"/>
. R* k" T. g5 u2 o' n$ W6 s+ k9 [ <Option Name="bAutoDecideImpute" Value="true"/>
{( T& m- g& r) o- W. `! l; w <Option Name="iResampleMultiple" Value="150"/>
9 H5 _1 { L% L% t4 I/ M+ k </Options>
# _# X3 {& s, {" q, }* U. b! h0 B </Config>+ Z' F. @/ ~$ w$ U% D
1, C( @! }& l( k) Y& W5 t- |
2
V4 t' l# u9 k9 s4 z' y 3
2 n5 [+ o9 ^# B2 h, v 4
+ S! r6 t9 P; h/ |& {& b 50 N, _" K, M; F8 m; o% t5 k
6
5 r E3 x' {$ [ v) i 7
( Q5 @. s* N) {1 g: ]0 ~ 8
0 P# w: g2 V+ t$ o% ?/ h. ` 9
! t- w# D6 o$ _& u: w; i' O 10
+ Q0 D' h! o0 b8 L, t 117 S( M8 d5 x$ h
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
2 T+ h: A1 K3 e6 B! e* S A" {7 J9 F
7 Y5 N$ e$ @4 L+ y8 ]+ O" { (c)SPL环境配置' T M* K1 N8 S. V
1>. 配置外部库
- G2 D+ Z& S% [9 e. k 1 T" d% r6 J1 r5 \4 N& Q
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
$ |7 c; a3 j% p% b / I/ ]! B6 s0 v7 v: u9 h* W
/ q4 U5 g3 Z1 \1 M% ], L' ~% }
2 g; b* N" Q. t- Q' B9 k4 C 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。5 z# W$ U3 Q+ h5 O
; x5 P: \8 @, u* ^- h+ g* k4 @ <extLibsPath>外部库路径
6 I9 Y+ o6 z% b5 g, i
/ Z: A! Q( |2 v7 j: b <importLibs>外部库名称(可多个)
' R1 F ~. `$ m8 i$ T/ f. P
* E# z4 T% e5 N" ~7 v5 A3 u 2>. 线程数设置: m9 C" S7 P" c, H& j9 D- {
4 p! w/ Y$ F! D1 L 如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
5 D6 @/ {0 i) Z# k5 ^! q6 S3 G
0 D0 W& N3 }0 A( T( J! d( Z * q- z, ~4 {! X. ]4 M- Q
* H8 K, C! [. i. Q9 N0 h 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
: t2 p. z4 F, _; T4 J, c! M3 @& N 1 \, z1 w+ b% F& [9 @0 L
<parallelNum>最大并行数) E+ a* x. q( l" X
" f; ^) ~5 `# m
到此,环境配置完成。1 M7 u0 k2 o; @3 I/ h" S
& M' j3 u: N0 x 3. 建模和预测
, p* z D- O& [! l) A. o (1)加载数据! _! X5 R% l7 q1 I7 H7 A" S
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
# O0 I, X- Y8 C X5 s$ z
: `5 M3 | _+ c; R9 R" C 设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。6 Q4 A7 M- ^/ X- X6 O
7 q- l: q& O( q! j! g" f, t% l
Q" }* E6 Z1 _- j
4 \5 |+ M' m; ~7 Z0 G. L 文件命名为bank-full.csv;0 E) @, z1 U( t. z2 {# ]' w' I
4 C1 ]/ C3 E2 k5 [$ ~+ P) j A. z- E. [. T* g
1 =file("bank-full.csv").import@tc()3 J2 g( c2 j9 c/ h! ]/ C! z
2 =ym_env()* @& @) @3 D% i; K' g p
3 =ym_model(A2,A1): T; d+ A$ f8 V& s: i
A1 导入建模数据,读成序表5 k6 [5 X! Z7 l+ J7 @
5 X- f X% O+ \) z" m
2 w3 `+ Z) j4 U& P# T! y
( q: Y# S, d% V* F% \1 y! h
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。. d7 U% b- g' g$ H- |4 b' Q
3 {/ l4 m- V# s) R0 C
A3 加载建模文件,生成md对象+ z; S' ], u8 _# m7 a$ h9 I ~
5 X$ b! e8 _& w5 r6 Z4 N (2)目标变量设置和变量统计
4 V- _ A/ C5 x* X 数据加载进来后要设置目标变量
: \% q, E1 f! z+ |( S) X! {6 r$ P l
# m. W" [" |! r A) ^4 k3 n/ r$ M+ D3 ^& B
… …
9 s3 b, ?% o. s) c2 m* K 4 =ym_target(A3,"y")) I" t9 ]8 ]( z0 Q. ?; u$ j4 e
5 =ym_statistics(A3,"age")
7 s+ E* R; Z; {# ~ X2 G& D 6 =A1.fname().(ym_statistics(A3,~))
% Y0 }; D# n- A6 {" c' y5 |. @ A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
9 h& c# H2 l4 t4 z+ f% k
4 L* l: t0 B. ] A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
: s1 A% d% q% ~, C( e5 z
/ U) C3 U# @% F7 X* z- f1 [ + f4 u4 F9 m9 Y8 G
; ]/ M/ k# g" e A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
8 O+ W. C+ a5 l # G# O3 ~3 U: O, ?/ q5 R
" l8 y0 ^) T5 B1 h
k) b' @& Z. j3 U7 K (3)建立模型和模型表现
& f3 i) A6 `/ z. j* T. x A
7 o: R& F* D& U+ Q … …1 o. I, y) ~1 F7 U; m
7 =ym_build_model(A3)
" j# R; X* d: H$ w1 L! Y* W# } 8 =ym_present(A7)0 V8 U+ w2 i; q# z# H1 |
9 =ym_performance(A7)$ M* C* ?! f! k* a/ D& _
10 =ym_importance(A7).sort@z(Importance)* r2 _6 v1 Y! x' w9 K
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
8 ^1 H* z: H' M% E( l0 S1 E
' C, Y; n! Z5 e* P9 y- D. @ 模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。 H1 @- Z6 V5 }: V, O
$ `! y, T, P* l0 z A8 返回模型AUC值及参数
* ]8 g Q! y) h& h% Z5 R 7 N A/ Q- }5 M( u
+ ~; H& r% p% b4 O
' N* ~' ]$ P* l: e' a A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……0 y" B5 V7 l' @2 e+ i/ f8 o
' e* b6 E4 J! w; z2 h/ W9 t5 B
. m, ~3 C3 ^" g: c" s
6 {" z0 D- p$ V9 h 比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
+ [, h4 r4 S8 J * v9 J2 k) I: n9 p$ N8 f1 P6 X
d0 r# U- m C: u 5 j& D0 u* m, { W
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
! }/ t! L: `8 E5 P2 X G$ N
+ v6 ]+ o) m$ Q 9 D4 n) `8 S8 Z; v% x6 e
2 o1 z* y, c9 B7 _( T5 O
(4)保存模型
, X# ~" R& y. Z# ^ A. M. _' X! W' | ?9 d* M
… …
! t! f' n s3 D0 [7 A* ], { 11 =ym_save_pcf(A7,"bankfull.pcf")8 r$ _* T- @( ~6 J3 }1 C0 c
12 =ym_json(A7)
4 q# R. l0 b( [5 [( `+ g 13 >ym_close(A2)
+ z2 U8 q9 C% A$ R3 |! E; P1 b A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。3 z+ E8 i' ]9 J* h
* `3 l8 m! X% V- L4 |" S A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》% B1 M$ B: H' Q7 e7 K; J
% _# @, J# g4 M8 x9 f
A13 关闭环境,释放资源。
! i& h/ C. p; h( F 0 Y$ Y0 W. Z% r2 ?5 W- z- ?8 h9 Q
(5)预测
/ ^$ h" h. S1 @( k2 L; h$ i& ~ 预测之前需要有pcf模型文件和预测数据集3 S) a5 |) v: o
& ` f2 _* ~8 u
A
9 d0 n, h6 y( B5 H9 J 1 =ym_env()2 X- I' E: b/ R* A
2 =ym_load_pcf("bankfull.pcf")
% P' C W0 u! `# y5 _ 3 =file("bank-full2.csv").import@tc()
( Q0 t) r8 \$ U# X* j# i/ y+ D1 g 4 =ym_predict(A2,A3)
: [' b) m! u: a 5 =ym_result(A3)
" j5 ]$ i, c6 ^- {: l* W$ l) o 6 =file("bank-full_result.csv").export@tc(A4)
3 U$ a' E$ w. S; M 7 >ym_close(A1)( G1 n& k3 e4 O" s1 D- _
A1 初始化环境
" b9 _# P; ~* R3 M9 }0 w ' T# V& ` o! ?# r$ Z
A2 导入pcf模型文件,生成pd模型对象。
2 _ y' E, T: W. p
% U4 P, ?2 B# J$ w" B A3 导入预测数据集,读成序表! }+ `0 N# }8 E! T/ Q* W( u9 F8 X
4 i& K) c; i, E3 Z/ Q+ o
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
* V" e4 F- i/ b; q9 N( W
, R2 u7 l+ f# X& C7 _6 o& y1 W A5 获取预测结果
/ T% o+ b) F& ?" L
$ Z! r6 `0 z/ i" n7 f$ O A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
, G, y8 X6 V+ p & f4 o/ N" Y' e( e' ^5 C* R: D
1 _3 x* g, v0 _/ Z" l# I7 B
A7 关闭环境,释放资源+ Y: h, S; _0 y- u; m9 B+ m2 @
$ n# _# ~5 g1 Z$ l: N7 c' N* e- W& S
4. 集成调用! r- R1 t: g; B8 C- z1 [) T2 A/ S( i
SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
8 H4 E' P$ g, M2 T5 R J
& y3 N# F; S9 P6 B% z 总结+ v9 n5 j6 H5 B8 e# Y
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。; C" b; g2 Q# \& ?3 G( M+ }* Y, {9 h, {
$ {% |! D- D, S) s( m SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。" Q. z" ?4 N& P! R* F! H8 x
————————————————
- X: [& q2 w* D* r) ?8 `) [# E& } 版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; ?( o$ }+ l" ~0 ^5 ?
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462' Z) Z. g+ z( |) B7 R: t4 M
& c: K/ j8 y# ^/ D
9 X7 ?/ c$ d$ ~- f1 K
zan