在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564504 点 威望 12 点 阅读权限 255 积分 174574 相册 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 也不错 ) d. ?. p4 R$ R$ ?
. n9 Y p5 W5 f$ Z
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
; D7 u9 Z0 i* l6 z+ w* ~
5 q8 T0 V* a! H' [- s, z 下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
f0 F- K$ C: |5 l3 t& ?6 U$ g
H& D$ I8 I" F+ ]+ `/ f V- _4 T7 _ 1. 确定目标,准备数据$ U4 A6 T' l* A- j J+ r
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
( n. x2 M" f) F3 e2 s $ i1 m0 S& z# ^8 w0 M$ I
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:! O O; A& V# f9 T7 ^& n8 c
- p9 x. y" w( }( |( Y. Q
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
+ s K4 U5 N% C/ S' Y6 r 5 ~# J: i5 A2 P. u! k6 s
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。' I& E& b# G' t- F0 N |8 D0 H
: h+ h; x) n5 D$ N
采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
$ w! j$ b7 N# ] - h7 Q# U* K2 x2 t/ ^4 M
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。) P" s4 {+ j" X0 A D; D' c
4 h4 d; { z: x6 x% \5 t2 n
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
+ l) s' N& I4 G( d) X5 B: K
/ C- T6 ]( l5 A% r% B* N 2. 下载软件,配置建模外部库8 W& k' z6 p4 S% m; g' U3 L
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
+ l4 U0 U$ ^6 o1 r: l8 j& ]/ D' B; k
" U, ?3 A+ C- k1 h6 n8 r (1)下载安装集算器(SPL)和易明建模软件; t8 L( _/ Q, n: f" l
集算器下载:; w4 l5 ? u5 M r6 @. D) d
“http://c.raqsoft.com.cn/article/1595816810031”
& y( V6 ~6 d2 Y$ s4 a% H& l5 E
& Q& K: K$ b Z, k/ x 易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
4 [6 j0 i4 ^6 h P9 f : g: b. S$ B% u
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
4 G) m6 s, v9 x
! v) p# x6 _. Y% D
$ l5 O1 K) u- g8 V2 D - C% r4 S6 K( S) p. k$ ~3 X3 K/ U3 u
(2)在SPL中配置外部库
6 q+ i# b) I; H (a)复制外部库所需要的文件- u5 J' h; L, g
在易明建模的安装目录下找 YModelCil 和 lib 文件夹
# G* n. {5 p4 R* [# z) T
: r2 P$ ?" ~4 t; `+ O
1 X: a1 H0 V2 G 4 f/ j/ d6 a- t8 C% e) o
然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
1 V' g# f' m5 `. ~" ]9 a
4 r3 k* M" u5 X& m& k+ E' ? 建模外部库所需的文件有:
8 ]% C2 K. }+ T8 F+ [1 G& o* B : S( X. @1 r& l6 K, r4 y: ~
1>易明建模目录的YModelCil中含有以下jar和xml
8 C) c* I, P0 J/ E) m 9 m/ D O! z. K0 @7 ^
ant-1.8.2.jar0 {" y# m0 {/ z, c
commons-beanutils.jar
6 z2 _2 W) P9 p/ n. [ commons-lang-2.6.jar2 l% n( v4 E7 s# I& I
ezmorph-1.0.2.jar3 z( t+ I4 _: [
json-lib-1.1-jdk13.jar
! [! L8 ~5 c! d2 j! ?: I raq-ymodel-cli-2.10.jar& s" x& |9 J# `/ j9 o1 x: ~. _4 M
userconfig.xml/ n& U: Q V% N, g8 y
* V& W1 ~- Z& Q) t8 O$ [" h 2>易明建模的lib中含有以下jar
2 K: R5 { Y4 G1 |7 q6 B
- ~; c2 I8 E( g; X- A commons-io-2.4.jar" w' @- Y7 A1 y# ^5 A1 z* V+ E
esproc-ext-20211104.jar
1 v8 D7 Q+ O6 F8 m, x) j6 \ fastjson-1.2.58.jar
& C' @+ R1 H O. v5 y gson-2.8.0.jar
) t3 K" U5 m; N- S" V8 e% r2 o jackson-annotations-2.9.6.jar- i5 g" h8 L; q7 Y3 s
jackson-core-2.9.6.jar) Z9 a5 M+ B* u6 {7 z" ~$ G
jackson-databind-2.9.6.jar; C- S2 k8 X1 D% `& K2 @
jackson-databind-2.9.6-sources.jar
. _: p+ j4 Y$ e3 O9 Q- ] jackson-dataformat-msgpack-0.8.14.jar
n( |* b( ` c) X; B" A mining.jar
7 S; `' c; K. ? msgpack-0.6.12.jar
; v9 ?% [& _; e+ \4 a L2 y msgpack-core-0.8.16.jar
4 ~- B& t5 h/ M ^" D+ U6 A) }1 f( J # D$ ^5 ]$ u. h" I
(b)设置userconfig.xml文件参数( w4 p3 ~4 ]5 N% T6 m* n
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数# d4 P" N# {. }8 a% Q- |
7 u9 ?& Z; w/ N! K 名称 参数说明
# T! Z" j+ ^4 Y7 `, w sAppHome 易明建模的安装目录& z m; c6 P( c9 B& o! N4 V
sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7! M7 ?: }4 w) X) Q. l
iPythonServerPort Python服务网络端口
; c ~) H4 k1 W" ]% J7 z x iPythonProcessNumber Python进程数6 @! _3 Z5 [( c
bAutoDecideImpute 是否智能补缺5 ]( O7 v; g2 { G
iResampleMultiple 重抽样次数
/ K4 z- t7 {& G1 v/ b) i0 [! P 其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
+ ~* ^$ O. c3 R; q' [: Y, H
7 w7 Z/ ]3 k+ z: v0 z5 ], O/ x <?xml version="1.0" encoding="UTF-8"?>& v2 N; o* o: r- X8 p
<Config Version="1">
$ b6 z+ o& {5 j8 [/ D! c0 L <Options>8 K/ j( j# v6 C9 b
<Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
1 k3 C5 F4 c/ A% T- S <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/> [: v! j3 \, \6 }
<Option Name="iPythonServerPort" Value="8510"/>' m) d* U+ k( S( ]. U' F1 @8 W! ]) ^
<Option Name="iPythonProcessNumber" Value="2"/>3 v9 j; }7 X7 v& B$ g0 h! M
<Option Name="bAutoDecideImpute" Value="true"/>/ H8 C+ e$ K4 b) ~
<Option Name="iResampleMultiple" Value="150"/> 5 B. D& p h3 J& ], X7 V
</Options>7 |7 a# V+ d! t+ T
</Config>
+ M* \: f. ` w+ @7 ~" N( U 1
% x" B) Z4 _+ N 2
x0 @, P" x4 w2 H 3, a. r/ A* V* C1 x
4
- a- b7 [5 [* X" n+ S: I 5; r3 ^0 U7 V! g
6+ ]% u+ A9 o+ y4 M! O8 [
7
; P; D" x' l4 M 8
, I G" W, h2 I/ o4 M 9
+ A9 f" Z1 A# [5 j0 Q0 N 10
1 E) Y) i% P8 B/ ^* E: @8 J2 q 11
4 L) x+ I& e" l3 R& ?7 W& U 其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
U9 V, B. n: `, Z
% j$ ]6 D4 ]& d (c)SPL环境配置
) M" `' c H) I" {* k v& J( ^ 1>. 配置外部库
* J. C* C, Z/ |+ d) h
8 }- K7 @8 m% ]) G2 R 打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。& b1 H6 O+ V5 g9 @2 O
) d( U/ w) }7 E6 w
3 ]5 H! x0 g4 O7 Z* m9 s
& D" J$ R3 n" g2 C
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
& z) D* P1 _ m, o 1 b& |3 ~6 A4 h# |& q5 W4 \; z
<extLibsPath>外部库路径, S: `- ?# B% C- F4 j
3 V0 M( x/ B$ E* W) x& H <importLibs>外部库名称(可多个)
- |0 e, H( V- ]/ z
V7 K4 y: ?1 [+ t 2>. 线程数设置
* p5 p0 i; S. s) U6 Q R
7 D4 P( Z1 p6 E; H 如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。2 k/ Q8 _. E8 }; }8 m7 G5 `- i
+ `2 H0 l3 [ A+ E
& L7 _ B4 O2 Q q' a' k0 ?
7 P% H# [. E9 _# q' o j. Y 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。, b, a1 [. Z3 C
. a% Z( x2 ?+ z5 X, f( }5 C
<parallelNum>最大并行数7 i3 L W M* K3 v4 A& c# j R' G, \
- D2 ~' c4 I! c2 e3 f+ f& w 到此,环境配置完成。
* Q0 o1 a& B8 w. p$ N. v0 c5 h
% O: S# J8 r: o( L: \6 z# q 3. 建模和预测
$ R& ? {7 h, v2 u4 j (1)加载数据" K0 U: G/ V/ F: K6 _
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。$ `2 A' t! H2 y+ G+ C% ?) n
0 i- z; k6 b7 t: g: S 设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。1 m: H5 v6 ]) u8 w0 z
$ W* [) v7 {0 D 0 u( h$ a$ l9 j( ^
$ V4 Z! d5 ^& s7 `* {* V9 M
文件命名为bank-full.csv;: l9 Y# d7 s S1 y4 d
+ z. H! l$ l( l) g p; ?" V A
* ~4 W# u( e% `3 T. R4 O 1 =file("bank-full.csv").import@tc()) [- `6 t5 g9 T/ @4 m* i
2 =ym_env()+ B8 ?+ \9 M/ F, u
3 =ym_model(A2,A1)* o, X& C2 s. ^; A# O4 D
A1 导入建模数据,读成序表" D- Q' ?( s, {
1 B3 S+ h- v% @, W, g P0 [! c% h# N
! n; X& r. j. ^! r$ B) {/ z
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
0 B2 b: z! _9 T
7 t/ q1 N1 P) P$ m8 b9 H; M" H A3 加载建模文件,生成md对象- T5 d2 J8 l" r$ }
& a# r J# J0 ] (2)目标变量设置和变量统计
$ k1 u* v: G! s& Y2 D* \0 s 数据加载进来后要设置目标变量
' o. T# D; ^' k7 G0 s" l
4 d: F* y# I" k A$ y6 [9 }1 _; N% c
… …! a$ x' Y6 P3 u' o: M2 }
4 =ym_target(A3,"y")- V; L+ {5 B' ~1 O) t% q. t
5 =ym_statistics(A3,"age")
# f) t4 I+ g8 c1 }8 s: l9 v 6 =A1.fname().(ym_statistics(A3,~))8 E% x! T( T6 J0 z6 F/ a
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。/ F, C6 s3 d3 _- f
2 D! w4 g: y& b; H3 Q; g( S" M
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。 ]# I: r0 k, H/ b
- X. c0 g! G( h) N. m; l2 R. F- `1 Z
" w3 E M! y" L
& g" C0 q- f1 f u5 S; y A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
# H' I( V. g0 s( G7 H * b3 P, f' ]/ M1 H
( b4 Q. c3 W/ z" y _7 d % m) d9 I0 F2 i# ]% U
(3)建立模型和模型表现
; g$ o+ a" o4 d( T6 o A
, _* d) Y4 p; N4 R3 C& I … …
. p; W/ b( S+ Q- J% E# g 7 =ym_build_model(A3)
' C) s$ C. J+ G* R 8 =ym_present(A7)
* c; r7 ?, @) R& {* h" V2 E+ N 9 =ym_performance(A7) u0 o* `+ u+ g; b7 n
10 =ym_importance(A7).sort@z(Importance)2 f/ b) n% P! N, @' u* y' i% T
A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。, f% T; b& {0 \! X) J; @
2 Y/ C& Z& D" {" \. I5 m& h# q 模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。. P% l! ?& h% V: q* g
9 i$ {7 E9 a" f
A8 返回模型AUC值及参数. p" I) p3 c9 u/ s
/ Y( ^* i! {/ X# u1 U. H7 Q: l# ?0 j 8 l7 z' z; n' P% Y9 H; g9 Z
, M* @- v& r1 ] A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……! {1 f- @: ~2 L. `, a7 p
3 ]) b! r6 Y: v+ Z' b; e
1 T: ^7 `: Q, {. L+ ? ; {; [ w# Z$ ?' l# x
比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线; w7 H% m. ]3 g- R" A
/ o5 B* C4 K- F" B5 S ! e% @# [5 w0 v# T' S" R
4 s+ k& @& B6 [* m
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。& y: c* X7 T5 {! U6 y, X
. J/ D8 X) b" V( D5 R5 k
: C' p' Y) X9 f
. @% A9 b) \- A* U1 ~ (4)保存模型5 l. ?, O8 u# |# v
A
% v3 K0 ?/ v) q( J% o) O … …! M. {4 \3 C7 X" `3 v, v
11 =ym_save_pcf(A7,"bankfull.pcf")! Z' X' M: d+ q& _1 b
12 =ym_json(A7)3 h6 ]/ h1 Q2 k. B+ T+ g) i3 i
13 >ym_close(A2)5 M2 ]+ ^( E7 N1 k+ _9 v, w+ D! ^
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。" Z& j% d! |" p! E5 g+ o4 r
4 ~, E$ I- q' }3 u
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》+ c* `6 r! j1 g) S* v
& r3 R3 W& @. [% x! q A13 关闭环境,释放资源。; S( X# M. c7 L1 Z; I6 S
" Q9 K0 U* y, s$ A (5)预测
7 k9 X( q1 D3 w3 r9 G0 G 预测之前需要有pcf模型文件和预测数据集8 A7 ^3 R, L& N- @9 N% U
% L, p4 @" c6 u0 E" ]) X3 |: u
A
& R8 U) T5 K& E& j' W4 _. I- N* \6 Y* Y 1 =ym_env(); p4 a6 C8 O1 z. d! O
2 =ym_load_pcf("bankfull.pcf")
1 B9 [* T! w% m 3 =file("bank-full2.csv").import@tc()
' ~4 M) f8 Z2 X% f% y! J4 T 4 =ym_predict(A2,A3)
: v" }7 V. _5 Q: p s! X" _) v 5 =ym_result(A3)
( x4 E3 }% W0 s 6 =file("bank-full_result.csv").export@tc(A4)
4 K9 h: t. O# e* j( H* L" x: \" J 7 >ym_close(A1)
O' d. }- h5 ~# X A1 初始化环境
: t4 ^/ y' ?1 x8 l
9 I# m6 F+ Z# l' B A2 导入pcf模型文件,生成pd模型对象。
1 ?7 _% F4 T+ y" Z $ A) T! X" l4 Y* r) H# E* e# Y) T1 f
A3 导入预测数据集,读成序表
, M: `% J0 F) w' P- i* ` ) ?) A$ ?9 \8 U; o/ X$ ~
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)" G h8 d9 r7 R8 O
. l! ]' S3 _( d ^
A5 获取预测结果
3 i- ?3 |% Z9 \ s2 }' T! v
) I" d" z" M/ R% W/ v! ~ A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。1 t$ z- b0 d, J8 l4 K
* M: y+ P# w" K1 J
) Z6 u; `" @# q! Y3 L/ Q
A7 关闭环境,释放资源
' }) S- Y e. H1 F# q3 D% y! w) q3 _0 y* X - d* Z, r6 G, p% ~
4. 集成调用
' _5 Y2 |0 B4 M. t0 J8 @# `2 b SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465608 R# ]5 E3 d S" M8 q. B
- m/ g& Q" G! n. J9 ?0 A0 o 总结
3 p7 Q u8 u, }: ] K% t, i 使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。, N5 s' t O) U3 }. h7 g1 `
' O% k2 U; `. ` I3 D SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。7 I8 q$ \/ r1 G% ?3 Y* `" A
————————————————2 }. K+ z' M" p: k; y8 k& [
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 T. z) d" w/ G+ U, ~/ ?
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462* Q% P/ c9 j0 N5 k. P: g2 |
+ t! j( J7 K$ j/ y
% Z9 e# p5 v; R* Q6 `8 `8 m
zan