在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564505 点 威望 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 也不错
: l4 P' U5 d6 [3 j8 T # L) m; Y% c* E# K
可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
" v( u2 C, w- w+ c& n ' M$ ]4 k8 d% b% {9 R: ~) S: u
下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
- Y) l3 W U9 S3 l b
3 F& b' J l2 z( Z- ? 1. 确定目标,准备数据
4 [' x0 j O4 d4 D" B 建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。% h9 S* |1 i$ Q, K
& F8 @/ W6 b4 {7 l
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:& Z& x0 Z: d# W. I+ ~& e
) L& Y' }& B) f( E& K5 h! S! m
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。/ {. k7 z4 O& o. d' P1 A
; O7 m4 ?3 ?: s' _$ y
除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。- \" p: I! O' K w% k
2 G8 ?6 l, E; I( u& | 采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
7 K- j: o" J5 e * {9 K: \) w, D! Z* |% E, c" W5 I
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
`* C2 l4 P% _6 e, B 0 Q5 ^+ w% \' L- l" t2 U1 N4 V8 @8 Q
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
4 N7 S1 M/ J+ V# n6 I4 Z
9 ?. k. J( R. k6 j 2. 下载软件,配置建模外部库/ A3 E/ \' o1 q7 o$ P
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
_0 c v7 k- N6 \ * |& y6 g. l( @ X! }+ b: ^+ ~
(1)下载安装集算器(SPL)和易明建模软件
/ U9 N4 @6 x5 C 集算器下载:" e6 c9 i3 U3 m: S1 q
“http://c.raqsoft.com.cn/article/1595816810031”
5 M- \& p) B k) P% g 4 n1 y0 K; X* o# r5 C! y: s' l) H
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
7 D5 [5 C7 X2 m. k/ G
! M. J& l& s% m* D+ o+ [3 Q7 j2 T 安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel9 L; V7 n* b' ^1 ~6 @
2 D6 O& X' O( s% [: t 3 q6 V9 s7 T2 B1 \
8 P" d( s- W& C" Y- L! Q3 S4 Y
(2)在SPL中配置外部库) V5 {* k9 ]- ^6 M+ w, L: H
(a)复制外部库所需要的文件
* Y/ p$ R2 T3 i7 m8 ^8 V: J 在易明建模的安装目录下找 YModelCil 和 lib 文件夹: n6 o% b/ e$ ^- Z- [+ M
1 s; w c3 a1 f& g7 Q: G
/ c, Y. W2 m7 i4 J" f
$ L( w( S) Z7 d' K 然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
" n* f' O2 t6 S, g8 i- k ) g R8 I4 P, _ s# s" L, x* ^9 S
建模外部库所需的文件有:
* J6 ]& n' s- `' R1 g0 O. ^+ H. y/ a - p4 A6 b, J1 J- B2 N6 h
1>易明建模目录的YModelCil中含有以下jar和xml: ^" y* Y' l8 |- }: i" R* x
0 u9 Z ~. G% R" h ant-1.8.2.jar
$ Z" K( @. w! ~9 d* U k w commons-beanutils.jar
! s+ q, d0 M n% O6 x- S1 D commons-lang-2.6.jar
* b! {8 I$ L/ y3 h5 a ezmorph-1.0.2.jar
0 k0 B. _$ O2 I u. V4 i+ J json-lib-1.1-jdk13.jar
0 y2 W* W6 R; U. z3 `. s: E( z, _ raq-ymodel-cli-2.10.jar- {1 F9 g; Y& f0 a) o, D+ V( C: s
userconfig.xml
; S" i$ w1 `5 Y( [2 h9 P' r) R* C! l" { . i! w4 e$ @+ |: I6 e% v. O- P
2>易明建模的lib中含有以下jar
! H4 F6 \! X) D8 B' M! G
: i, ^0 }* ^9 v$ s4 u; s/ y8 ? commons-io-2.4.jar
2 R% O8 v. h3 v" Q0 i0 r esproc-ext-20211104.jar+ z& V' t0 D, p& A
fastjson-1.2.58.jar
! k4 s1 z2 K4 l T/ y* r" G gson-2.8.0.jar
$ ^+ Y; Q, G) K1 S) X! } jackson-annotations-2.9.6.jar
; z( O- I* b2 u* `% H# P jackson-core-2.9.6.jar* p# }, A9 P; ^' n( l* C
jackson-databind-2.9.6.jar
6 ^- A2 \+ M7 C1 {0 o jackson-databind-2.9.6-sources.jar% U% Z4 ^' `! {4 F- A1 a+ e
jackson-dataformat-msgpack-0.8.14.jar1 {( E# Y1 v0 X, b4 p8 i% S+ W
mining.jar- @9 y# N& o$ s, j
msgpack-0.6.12.jar# g8 Z/ |* |5 {# R6 v$ h
msgpack-core-0.8.16.jar3 B/ W" d- j; x- L$ o2 n/ \
) k" N$ n3 Q K( J% v$ i" ?
(b)设置userconfig.xml文件参数
2 c( S5 Z+ i% d4 T* O8 ~1 l 在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
; }$ f5 X5 d/ S2 l% q' V" ~ - H) j% g! q: r! i
名称 参数说明
& S" o% I' L/ {6 s; S- }1 s- u sAppHome 易明建模的安装目录
3 A t" G0 n/ p$ o& V# U sPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7 A. z8 \" v! @9 G: x2 [+ C: P
iPythonServerPort Python服务网络端口
. W7 r) k; I, i& |. \ iPythonProcessNumber Python进程数8 E& W7 u, X7 f+ S' h* Q, \2 e
bAutoDecideImpute 是否智能补缺* D6 A$ A" x# H3 `9 C, }& D) [, L% X
iResampleMultiple 重抽样次数% K* `; A' u/ t* m0 s
其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。" s$ r6 L( [* N5 e" y1 {
6 E" {- | h. f1 |7 Y <?xml version="1.0" encoding="UTF-8"?>1 O- R" j6 B) N. y* C1 M9 r4 y: P
<Config Version="1">/ E' R& j& @8 u
<Options>3 z& M( ^6 t* G" n0 W! [+ [ z
<Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>: R$ d( j+ t; ~
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
! b: k& k$ a: U( U6 E- h5 D3 M <Option Name="iPythonServerPort" Value="8510"/>% I) h2 [! [) }' j: C
<Option Name="iPythonProcessNumber" Value="2"/>
/ L6 l: t1 j& r: ^' T! Q8 j! ~ <Option Name="bAutoDecideImpute" Value="true"/>
* j9 X' Y8 k! H <Option Name="iResampleMultiple" Value="150"/>
3 z; v+ V4 p9 A5 }& } </Options>
8 X& L$ S/ D: L' g; }' W6 l </Config>
) ^" v6 M3 v( z" k 1" a9 F( F+ c7 E8 S
2
* b4 {4 p% U1 n8 G2 U 3
0 D7 C1 R0 ^' ~/ q; F- M, h7 e 4" O1 X+ s! O; R
5
2 R3 B' j6 t3 o# I: x5 ~0 Q4 x 6
1 H1 t8 e! d# q4 y. F! e% c4 N2 g 74 u; V8 G* L' i) D; s7 X& a3 X/ M- z
8
: U0 k' w# _4 d( X6 n 9, q, p, P' m# r: b
10
* v! C0 |% D. @& S 11! t) u3 T, @1 x c. I
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。7 ]- l" P0 ]: M+ _
8 {3 L: j6 e1 Z, E- l/ ^
(c)SPL环境配置" x, Z) B' h: P/ x+ }
1>. 配置外部库
4 c4 N0 j, m6 p& U7 H* F$ g0 A: d e" Y, a/ w, }# ?3 V. i
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。. [) w4 X# j5 g: q1 J: O& |4 l$ d
/ S, C; y9 L: x& o5 }
: P7 ]) R- N& ~* ]1 s
, z2 P" n9 M; ~8 J9 ^ 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
) J; `$ T2 j: Z" w+ A" d
; f c1 _8 h H <extLibsPath>外部库路径) p |+ x$ k0 i
: D W$ K0 q8 j) A- g( g& P <importLibs>外部库名称(可多个)
* _7 _7 q5 I* h/ g0 T6 y8 m 2 ]0 ^4 A: k8 [0 ?
2>. 线程数设置& J& g' k1 x+ A( ~( r( o7 @
$ }& w( B- ?) ^9 u) p q
如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。. N; a/ F1 X" r7 `5 p
3 D9 v( r5 q a
. R9 u+ `. |0 i( I# A; g
* V( B- W, p' r+ L3 g3 ?8 q' H 在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
5 ^, |6 k3 H" Z) w% R: L8 J * Y" p- w: w- J7 n- l/ a9 X
<parallelNum>最大并行数
+ P, y- ]! }) }) d
+ k# l' p) C! G, Z' G: ~ 到此,环境配置完成。
3 b i# z3 L! N+ z v6 B v, U+ F0 t2 s" W$ c
3. 建模和预测
% P: W+ E6 B- O5 l0 }. e (1)加载数据; Z% e% P+ A% l0 f
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。. z' S6 h `7 n8 |9 }
j3 F: N; W Z7 h 设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。+ d3 Q7 Z% Z: a
; a4 C. {5 \* H9 R! H) E7 P3 k' d 4 ^% M7 u( `7 L7 O8 L9 t
+ H+ A. L1 Y' r$ u# }+ e& ~
文件命名为bank-full.csv;
3 s; M: {; @# h
7 K/ p7 d6 t) T& G, U A1 ]5 P- o1 D! I% g
1 =file("bank-full.csv").import@tc()
]2 ?$ D( }; G. O# |6 ]: P 2 =ym_env()! e4 M" ]" A, Y+ ^0 l- r0 t
3 =ym_model(A2,A1)
! O* C% o+ m! d7 ^+ r1 L A1 导入建模数据,读成序表8 _7 u- C" j( H1 O
- O8 t, `, o) ^' |: j
{( c, @: J9 L6 c/ X2 y 5 w( l8 r# d. K- M1 O/ _# t
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。) P: _3 h: c% B# h
, d# u' F- N; P+ A# O8 T A3 加载建模文件,生成md对象. ] N% ~3 W! Y" l3 K
, L" X9 ^' @: r) u8 k C/ r$ Q9 W (2)目标变量设置和变量统计7 }( y$ C( \, k7 |# B
数据加载进来后要设置目标变量
2 A8 `, h2 c1 C. p `7 Q
' Q1 _" m+ v8 b1 u8 ]& C8 O0 I A c+ N4 ~4 `1 |. K" j
… …; Q; J" Z5 f( O
4 =ym_target(A3,"y")# R. P3 f/ b8 @% l: S6 p0 u
5 =ym_statistics(A3,"age"): p) p( g3 z3 d% o7 ]* g: K
6 =A1.fname().(ym_statistics(A3,~))
9 l* d' R% V d% V- E0 o; w A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
6 M" G! l- Q' v6 m# [
$ Y0 u) U, B+ q5 t* f5 R, ? A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。, g' e* U0 l S: z
; Q- t( x; y0 e% ` 0 L4 \$ z0 i! s- K# {# l/ i, r
4 ?: U* f' t! Z6 v$ r A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
2 u( B1 y- M' _6 B& I
! w" I; }. G4 O# `
, _1 g8 C3 M& |/ h
) K) m% q( h$ o" q) h (3)建立模型和模型表现) o2 j$ B3 x) m$ e3 E
A- A) ]( q$ l& ~& l3 U" G8 G/ q
… …
9 S+ u" K. z+ m 7 =ym_build_model(A3)
' B2 C3 T5 f: k5 M* Y 8 =ym_present(A7)1 L% ^1 Z2 X6 J% J
9 =ym_performance(A7)
, g0 @. O/ e, T1 A2 z 10 =ym_importance(A7).sort@z(Importance)
+ [- @' t$ V- B" t& B A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。0 J0 @1 ^: O$ K
- \3 k# T6 a3 S# M 模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。: m6 T0 I) e- I U2 T& Q1 O. ~1 S+ k
& W( s( `% I* B% P* [6 V$ Y1 o A8 返回模型AUC值及参数
( B, b# k% j, p9 w/ F0 k + v- ?0 Z- E7 d2 ~+ j# O& X7 D7 g
! g2 E2 j% j w8 X; U7 @/ g
4 O; Z5 ?! s4 T9 n/ W5 W A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
+ J6 ~1 ]! t$ k* d- K. J9 A6 L # ^0 n) I9 e) [1 V
( o8 A% J% a8 |
8 o+ z4 J' z7 u2 r3 t* h- N& h; u 比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
, _' t/ `' M: q0 \ ) b9 @- Z! }6 K# I% D4 p$ O
: c5 X% F5 n3 M F4 Q* o! {* \1 Y
: L7 M& f* K$ J A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。" L" p, h/ {# B: s2 P
5 v% E+ W5 B7 c1 R8 [
+ z/ t) n2 o* d+ G/ | " ~* a0 U `1 F1 [/ @; H3 ?/ R# `
(4)保存模型
) \+ Y* I5 X3 h- }% R A' M8 W/ n/ [- ~: N+ m8 H: J+ q
… …' m$ ^+ R& {& l# i8 N
11 =ym_save_pcf(A7,"bankfull.pcf")
$ x! l0 \. V: V; R4 ^6 k; s5 | 12 =ym_json(A7)
3 ]$ Y/ ^2 g# ]4 h! l5 ~5 Q 13 >ym_close(A2)
$ g1 h+ \* E) _3 Y' ]/ I A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。0 h5 }& E6 h$ g+ T3 w+ w) m
- q# `6 O/ X# `: I$ z
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
$ s l- E; ^7 w0 O
' x2 x# [, h$ j9 c. w7 r' X A13 关闭环境,释放资源。$ o% e6 h! R" Q3 G+ I( t
# e+ A! X! b6 [ (5)预测* J. R3 A7 ` I" e ~$ u
预测之前需要有pcf模型文件和预测数据集, b$ E& h/ G9 b& P! t
6 h5 E; r# N7 p* i
A L0 m+ @: t# [* p
1 =ym_env()
; Z y0 ?! Y" V* M" U4 Y6 X 2 =ym_load_pcf("bankfull.pcf")
9 h3 G) x; K. Z4 S 3 =file("bank-full2.csv").import@tc()% d; C! Q! c# \6 s3 i7 ^2 R
4 =ym_predict(A2,A3)
. f1 |' u/ l9 Y% I5 v 5 =ym_result(A3)
- f' C( `% v( _/ Q3 W' U% D# L* i 6 =file("bank-full_result.csv").export@tc(A4)( I$ T3 X' [& z: s8 N% \( Y
7 >ym_close(A1)2 g q- K4 G$ S& R
A1 初始化环境/ E7 U% V: {" d2 i/ r- H
2 j+ H$ ]/ D; Z
A2 导入pcf模型文件,生成pd模型对象。! x6 ], D0 V' N3 `1 J- o9 r6 { s, u
4 v- z- r& k% h6 e6 E( b6 e7 x& j
A3 导入预测数据集,读成序表" R# i2 x ~: t
* L# s" K& T* O A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
* T( E# h4 d% @ O5 ?9 o7 G + b K6 W- p3 ~. g. h7 j
A5 获取预测结果
; |2 o* q4 {4 E; W( l+ J
+ R, X, D8 W7 j" z O A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
, h( |+ P! a% U$ R1 {9 b; x; {* b5 p * H( w3 u; v- U$ U
( P/ E; c1 v& k6 | A7 关闭环境,释放资源
1 N+ V+ }% O5 @
6 C/ G2 @/ j+ C5 o; o" U 4. 集成调用
$ a l% M8 |+ `7 ~, `; n. O" @( F8 { SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465606 H9 n8 y" D. u7 Z9 b
* l) S7 |4 L) i% G' B! z
总结
$ p( Z% D( c+ F$ c" X 使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。8 I( Z. R# J4 d2 U0 N
5 _# U n+ G$ k/ S: Z SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。5 E5 [! O! ?$ Y- o O, `
———————————————— H9 B1 {9 I$ H9 t5 }6 V1 I
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ s3 U3 v) P' D8 Q: q* m- ~: r' n8 L
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462' G9 F* v* q6 [. [
7 x- e- _1 t2 h' Z! j
" ^0 _* y* G+ m5 g
zan