- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565610 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174906
- 相册
- 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 也不错! _5 \( p/ P- B
- v& x2 `6 q; i) R! q- G8 D可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。( c! b/ w" D1 k
" D! \# I: F: F) ^' H下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。; U+ C" e9 ?- P+ _3 R
' C3 u9 w' h( n+ ?1. 确定目标,准备数据
G- X, X' i$ I" |- Y建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。: g8 E, J8 o7 z3 `0 y) [
/ {9 e$ s. Y; t7 q历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:4 }( p) u' _. Z8 }7 ?
9 O$ ~/ T: n0 j7 P
首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。3 K ]8 S. |# K, n$ o% f
0 f4 w9 q9 \$ D/ Y* L& ?3 b, o9 H除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。$ x8 g7 t/ y6 q9 d2 @
4 y1 [$ C$ d: U$ @ X! j' z: u5 w# _采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
1 [% R( m* Y$ w& c
0 I8 D/ ]. B" }6 f4 x准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。4 Y- I* b/ V! Z; P3 z6 p* P
7 b$ o$ v$ Y; \7 E0 U! O2 n
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。6 u& ^4 L/ K d+ C! K- f% `% }
/ y# y7 f6 K5 i, M2. 下载软件,配置建模外部库1 m$ u. h+ f+ y- J1 J" I, b. t- k
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
% C, M/ d% ?8 n4 @8 J7 _$ A' L! b8 G# k/ l# F! r. o$ m ^
(1)下载安装集算器(SPL)和易明建模软件+ ] A9 k& k' h( G! n5 W
集算器下载:8 Y$ V1 j6 X5 {2 }
“http://c.raqsoft.com.cn/article/1595816810031”! ^9 P$ D% \$ I( @# A0 [1 I3 s
4 o0 I/ |* q& ?- e" T4 `
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
! a1 b& x+ j( K4 W6 S d) r& {# ?5 f7 }% C$ c3 x1 R. D
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
) N# q/ _% u. _ y
' A6 r5 ?$ n, F( r0 @% F, A1 P' q
z: S$ ~1 x8 I+ a+ @! X' Q
& @* a9 z( @7 }. x5 d& Y(2)在SPL中配置外部库
) z9 W0 E5 R7 W. W(a)复制外部库所需要的文件! P9 a( W4 K! S z7 S
在易明建模的安装目录下找 YModelCil 和 lib 文件夹% P0 t" Y5 ^+ \# ~. [$ N. R
: C: C) x- l. W2 V# G% F3 B4 N% b
* X# _0 ]" X) b8 R u
+ i8 K2 ]" z# Z! ^2 }然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
" W% v6 t) O& ?! A' D! G, C" g3 F' Q
建模外部库所需的文件有:" j; a7 u$ t' o, `- A
$ }6 {2 @) g% K; j) i& n1>易明建模目录的YModelCil中含有以下jar和xml
2 o0 P& K* {6 H, \9 R, b) ~7 b/ O2 h' e3 Z: C* W. W
ant-1.8.2.jar* @! Y! V2 w, F* m3 G. h
commons-beanutils.jar
, h! M9 J' Q/ R4 ?commons-lang-2.6.jar9 M* T, T. Q: S! ?8 t' ]
ezmorph-1.0.2.jar, ~' U' U$ m" Q0 _8 l7 O
json-lib-1.1-jdk13.jar' e i2 J% Y% O6 q* P
raq-ymodel-cli-2.10.jar4 d+ t$ o5 @: x. b: @7 g, N9 q
userconfig.xml* R5 F6 t# L( I |: t: H2 L( g
) T- Y# t7 a7 O3 [6 `0 j- C; @
2>易明建模的lib中含有以下jar
0 V' k4 d; u i
4 |- A- s3 ^* G; W5 fcommons-io-2.4.jar% M1 [ F! x! l6 J/ G$ n0 `
esproc-ext-20211104.jar/ r' e- [ b2 _; ^% ^
fastjson-1.2.58.jar
2 Y# z; v3 V) C) n9 Y( \& Cgson-2.8.0.jar
8 h& L. c6 z2 S, _: q, hjackson-annotations-2.9.6.jar$ o! m! A7 [& P6 [/ X
jackson-core-2.9.6.jar
( w, L1 Z4 `# A0 Q& [/ u \jackson-databind-2.9.6.jar+ W/ Z+ ^$ D J5 S; `0 \
jackson-databind-2.9.6-sources.jar
3 w( Y5 R2 \% Fjackson-dataformat-msgpack-0.8.14.jar4 l2 e( i5 \1 k- ]! r
mining.jar
( j0 K1 H, S: ~! c3 ^" o- ?msgpack-0.6.12.jar0 ^+ ]' Z1 D( J+ g
msgpack-core-0.8.16.jar
8 @1 @& P A5 A8 X' |! o4 Q. i6 Z- r- d! \6 u
(b)设置userconfig.xml文件参数/ v. a/ \9 P# A" k# }2 n* }8 J: o5 j: x
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数2 [8 c5 ]# b% ~+ N$ t0 @1 V
3 h1 w3 x+ w+ d8 ?名称 参数说明, v4 J) h+ a" E5 o8 v1 A5 h8 v! B
sAppHome 易明建模的安装目录
7 \2 |! C3 t, [: m( ssPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
+ a, A; r. f2 |2 y. V- jiPythonServerPort Python服务网络端口
* w) k% T/ [$ f# o' ~iPythonProcessNumber Python进程数
( r! Q, D% f1 ibAutoDecideImpute 是否智能补缺3 @) G9 d6 U3 c. }
iResampleMultiple 重抽样次数
8 N& t- @) k. \其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。$ \0 j0 S2 g, K! h
" g3 ]' p5 y+ v; C" ?5 b0 y. p<?xml version="1.0" encoding="UTF-8"?>
% w0 b9 i+ k( \+ ]. E0 H( o<Config Version="1">
0 n. J: E8 v: c" F w <Options>
, f1 f: J+ ^. X( h; P+ T <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>2 |! W' p$ A A% V) p
<Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>" X- Q! j. ?5 i3 [; F& `
<Option Name="iPythonServerPort" Value="8510"/>5 ?' H4 b! D( U
<Option Name="iPythonProcessNumber" Value="2"/>! C% M( P6 S! ~
<Option Name="bAutoDecideImpute" Value="true"/>4 I# K9 M4 f# }
<Option Name="iResampleMultiple" Value="150"/>
]* `. h* K2 Q( E& u% A' ~% a </Options>- q8 ?, @% E" x
</Config>
8 k1 e$ o, n7 W) Y/ Y# S1) K$ z. b- n6 n6 w% |+ ^! X
28 B% w: [- F1 ?
3
, C+ b6 R z, b" h43 _( E2 p" L6 g1 T
5
, u; K, F5 k; h3 [6
' p J6 t- X! Q( w7$ z+ o* j* ~; c& G
86 j* X$ ]0 ?' M( F# F' |7 E
9
: I- ]$ v V9 j$ E/ C10
8 a9 Y2 l1 ]% \! u; J6 j1 ?, W11; }0 l) \5 @7 k
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。9 i" x9 [' ]1 k ^* g% O
' i6 E2 Q* Y0 K% t- {
(c)SPL环境配置
, {) R+ G, g+ K7 {, _1>. 配置外部库% H { A( A/ G6 i$ I
" n: j. M" j. F9 u, V6 R打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。" N8 M! D9 o; J$ Y( c/ W, o, c2 I3 H, _6 P
+ P# g8 M- Y; N+ \3 G6 M
2 A; I/ V9 X$ W2 [7 L j1 F
; N: L0 R7 u& t+ q: c) _0 t4 L2 \在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
9 c V- @5 K% D4 `4 d2 E t7 D- a* A2 G! E
<extLibsPath>外部库路径# n# Q4 ^ Y% c4 L. _- ~
2 [4 r% J3 u& F7 u3 q6 N<importLibs>外部库名称(可多个)
@, P% F" I5 V
0 P" f# k' |# F' E, {2>. 线程数设置4 _3 e- r4 @8 j6 u. H! h+ t" i
/ M4 ]* Z' q" t8 N$ G3 G+ _) K
如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
, ~+ j2 Q& h ^/ a$ ?# _
/ k0 v+ ]6 ~7 U, [
' H, r+ z( V: l+ Q: Q' z: C' U# j& W. T; _% d/ Z3 D7 S! Q
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
# q1 M# p; s' x* I) n$ Y8 m h& `5 y' V5 \! X% e
<parallelNum>最大并行数
0 r8 z0 k( ]. ~5 G, M
0 x! j# R. u0 Y* e, W* C; A* y到此,环境配置完成。
* D& D. ?" I0 d) |; t$ T
' ^/ F4 g0 k4 v* D7 `3 {3. 建模和预测
& g! N0 ]' \( j(1)加载数据1 g4 F6 t* V$ k0 E& ~! x
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。! k1 O5 ]& U. Q7 J* U) T, x
# J) W2 P/ |3 x, N1 _: g' q8 k- ^; a设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。" H1 h- E9 e% ^4 n; ~- A
( f/ B4 ]- v9 G2 U9 G. t/ Q$ D
" j' @: i" `) @- z) E: w' T1 d3 |
! H# C( s: |: W& i文件命名为bank-full.csv;
% p/ b* `: N; f, Y* m/ x
$ u+ w4 ~1 f/ H" BA
0 ]% t1 @* n1 U7 x1 =file("bank-full.csv").import@tc()8 O8 o+ |$ @% b) t6 y) D! \
2 =ym_env()
5 N# B' _; y' w+ O6 m3 =ym_model(A2,A1)/ W9 c: z2 ~: p2 _
A1 导入建模数据,读成序表
1 @( C& a. u; R0 a; q! e: f( B: }# L; J* `9 \6 I. g2 j6 o. \4 K
1 I+ X, {+ R& F. T
1 W6 `- b+ [5 T. H& r1 G& |& }6 f5 D. P
A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
6 j, @' S- d) Z7 W, w7 J4 u( R; n- l1 B' E
A3 加载建模文件,生成md对象) W7 H6 k3 G$ T2 C/ e% L. t
$ i! z* ?. K3 ?2 Y% e' _
(2)目标变量设置和变量统计: A- Z3 Z) m) W
数据加载进来后要设置目标变量
k! S; f& D. Q9 ^; h, s6 R6 \
3 m* ~. D/ y% w$ o3 lA
5 g* N3 C) W0 W9 }+ l… …
2 T1 S- j' C, K6 t9 i' ]4 =ym_target(A3,"y")
: ?0 g+ |/ s& o5 =ym_statistics(A3,"age") a" R2 {) D) ?/ J" w& d
6 =A1.fname().(ym_statistics(A3,~))) \) q V3 I- H! _9 v& A
A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
; E# I3 l9 N8 b$ e/ r' p4 ?1 v E( {
A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
) n# ?" d: ]$ r, x( H) x+ h# U$ |7 X" g
( V' d$ \/ ~8 c5 H" O v
' i6 C1 i# e: b( I3 ~. U1 v( RA6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。 r9 }( c) R6 N+ @
, ~& I& x* F5 I$ k) @4 r
! s2 T' _4 h, o, J+ k, Y/ T
# G* w0 M- ^( _& c. {3 i) J0 {(3)建立模型和模型表现0 d9 c+ Z% T0 L6 o! F
A
+ t$ h* }( r% i$ I5 Z) N… …
6 J7 Q! |6 ]+ d7 =ym_build_model(A3)6 C+ N, W% P$ \/ C1 ~4 M" g
8 =ym_present(A7)/ g# [+ z# d( i; z& R Y
9 =ym_performance(A7)
( E& r! I3 C2 A9 F9 @10 =ym_importance(A7).sort@z(Importance)
( ]9 j M# `8 N; C. h9 y1 ~A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
8 b) w+ O9 L5 t
) `' ~' W+ a' d3 V" c% U模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
' w8 o2 z6 m4 y5 x* E, J) {8 S& S6 e( Q
; B3 B* i3 Z T$ V iA8 返回模型AUC值及参数+ a8 F' A+ Q/ F& C$ l
' Y1 K9 s) J2 S
9 }" }/ @; ?. H# t
( b/ b" c' d% X8 M3 ^1 L4 l9 M6 QA9 返回多种模型指标和图形,诸如AUC,ROC, Lift……) l. I. {) N( V9 O. Z
1 e. f( E3 @; V2 l# K
! |8 Y# z! I8 r' t z" p. r0 l4 t& l1 S; C: l |5 N/ l( T0 w7 R
比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线, m5 Y" q+ n7 N
" S8 T3 {* _3 P- ~
7 t7 V; ~7 l$ a0 U- O2 S/ J: e1 E/ A, b5 A
* ~' T, d0 T( `, e6 Y: P6 ` s, X1 UA10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。0 r) }) O, X$ l! G/ |
+ y9 F+ _3 |* B
6 V; T+ w# T+ o. k4 ~+ w& a
6 F6 | _& V+ f" Z! P1 {/ r1 z, R* j" l4 T(4)保存模型+ v6 { w. S5 C: k0 Q2 Z B) p
A# ~3 [* Z# F: ?1 E6 l- G
… …: ]1 B O E+ ~: E$ [
11 =ym_save_pcf(A7,"bankfull.pcf")
/ C- a' g+ E" J* I" v1 W12 =ym_json(A7)" d+ t( K+ T* L, Q5 C- J1 `
13 >ym_close(A2)
/ a* w5 f5 x, J2 t6 G$ H! m" ]3 \A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。9 j3 j9 l5 |$ ]* r7 i7 l e1 }4 g- `
/ F6 F T+ k) h8 C+ ^
A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
0 P2 R7 L* I9 N% B2 m5 {
( |& @: I8 U0 Y0 h5 ~, nA13 关闭环境,释放资源。
" x6 W4 n! ~5 q* Q% M. Y; u3 N- C9 F1 e g$ J9 B' A W$ ]
(5)预测
9 B6 l: \6 M! ]预测之前需要有pcf模型文件和预测数据集
' o' b! A7 {& o4 X* j: B8 t$ r2 K c% }# K- y" h7 ^2 M" \
A
8 e7 u+ N y5 z) z1 =ym_env()8 e1 p+ r5 [8 E# G% R
2 =ym_load_pcf("bankfull.pcf")" b& Q* ]% X& \4 m9 Z$ p
3 =file("bank-full2.csv").import@tc()
- v9 L6 K) A% o4 H. V, R: x4 =ym_predict(A2,A3)
; p) F9 I7 B' }$ K; H2 ~5 =ym_result(A3)9 T3 q: x+ _& r9 |6 O, |0 x7 y
6 =file("bank-full_result.csv").export@tc(A4)% N. m! Y; g0 i; t
7 >ym_close(A1)3 Z: @) b1 D7 _
A1 初始化环境# f" c% { N5 Q$ v6 y2 S8 C: b
* b z9 i- q7 ~9 l& ]9 l; hA2 导入pcf模型文件,生成pd模型对象。2 `+ w7 s0 Q& e: p( n6 q9 _
' V3 [$ v" U6 Z7 S3 r4 h" T$ h
A3 导入预测数据集,读成序表
, P5 Y* ]5 j) V8 h) Q- F$ n4 B2 ~- Z- L: p8 }) p8 b0 `9 n
A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)+ B& U$ H3 Y8 S* U
$ q# q0 R& Y: f$ C1 f' P
A5 获取预测结果
$ e. F) [! ]: Q" {2 W0 B% q2 S& x9 P9 F: b7 J7 e7 O
A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。! b( Y- G/ l" S" X6 M5 r- p
% ~( y, O( N% }. y4 b4 A
/ }+ m' n2 k; P' ~! h9 r
A7 关闭环境,释放资源6 J) y) ]2 B( s* C# i5 d! [* B
4 P" b, }( H( J# Y, w0 \0 q! [; T
4. 集成调用% g6 n" L4 U1 V; v
SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
1 ^8 f& h: Y- n2 h) Z
8 ~0 i/ R/ v5 w* `& \$ [总结
: g3 K- r$ H* J/ m6 J使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。# C/ g& G e- ?5 z) G2 ?
: O. A5 S' ~! i8 {$ G7 c1 r
SPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。$ W5 i# K7 F7 n( ]' X3 Q
————————————————" H& t. k$ r, H x; F
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, [/ Z2 C6 f6 `; g \原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462+ A5 G% p/ G, _ q9 b
! E% y3 E( {" G
1 i5 G0 G+ Q2 @- f5 K6 f
|
zan
|