- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564499 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174573
- 相册
- 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 也不错
2 X% s1 v5 x: S. m* P' h
6 S8 Y1 j7 g8 v2 c可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。! c- F5 c2 }2 s; R
* `# v3 P+ s3 A L9 Q6 V+ I下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
% b! p0 H0 t$ b9 a* M$ H* a0 W. e" _, o5 p
1. 确定目标,准备数据; F4 O* h7 P* J: j' ?
建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
. ?3 g! X6 u+ a/ X# O+ O2 ?# O4 B S/ P; _
历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:3 V& U a1 p+ H- ]3 k5 m2 J
9 I( ], b- F4 w9 Y" x2 h3 [首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
6 o6 u+ }/ Q$ U# d8 [5 C
) v7 k4 C, Q0 I" P% y除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
* E( _0 h8 o: s R6 n
8 T+ j: Y" I+ V) G- ]8 m采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
_% o/ ^! N A, ~# j) A1 w5 C$ P, E
准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。$ {+ A F8 |8 s% |: O" u
5 d7 p' N. T1 u" W" s0 O
如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。' O: n$ C4 z& w) l/ @! ^
/ ^2 A9 U5 T9 Y2. 下载软件,配置建模外部库6 J$ P5 k5 r% k# u U" [' G
SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。' Y$ S0 G: f8 @/ g: W+ y% K
! g7 K7 x; C% |(1)下载安装集算器(SPL)和易明建模软件
1 m5 v, `( z% s! w3 x集算器下载:9 |3 S6 g. e# _; E y# `
“http://c.raqsoft.com.cn/article/1595816810031”+ N. l; B5 ?; \# x5 V5 U0 Y# l9 z
( v+ s2 U* \# }1 u) g* e! B
易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”& Z" B; B' l! ?$ R2 [. [7 G
+ t) C$ F0 i( Q# T2 m
安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
6 }! o0 W1 Q) b% H( h4 Y5 W- E- S5 i3 ]$ y8 E: V: M
& }3 O8 K; `, \/ |/ p. c; ]
7 C7 [" D- m1 d0 p! s! a(2)在SPL中配置外部库
" i7 H; ^7 k P, _+ `(a)复制外部库所需要的文件
; B! I- _( o( ^( r: K* \在易明建模的安装目录下找 YModelCil 和 lib 文件夹8 p6 }+ {$ ?- b! R) O% y
# r+ ^# g! h# X9 Z9 [
( q' `4 p0 i/ ^% `& n% A4 r
. M& x9 w" Q+ X0 L D+ O然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。% G( q5 I7 t( V5 m- g% q
# ^) D# |1 g; @6 X& Z. B
建模外部库所需的文件有:/ n$ C: ~, H9 m, u. d7 Z9 l% Q
! Y% ]0 }/ f% w5 |% Q- K7 }
1>易明建模目录的YModelCil中含有以下jar和xml' E! m2 Y& C) _7 b
" Z1 d+ B# E& g' K" }
ant-1.8.2.jar
6 |9 m3 x" @% E: zcommons-beanutils.jar
# L5 _9 Y. e3 @* ? ^4 R; Ncommons-lang-2.6.jar; _! ?" P, v. [$ j
ezmorph-1.0.2.jar
, |" L. [/ H5 Q. |* Yjson-lib-1.1-jdk13.jar, ^1 D' Y2 B( k, m
raq-ymodel-cli-2.10.jar6 V2 w! l/ i: s6 k; x2 n/ E; e
userconfig.xml
2 U' D7 i# X( I/ r( X- ]
+ C) I) z+ ?' u z5 f# \" S2>易明建模的lib中含有以下jar, u. G, S+ q7 j" |2 b
( \$ W/ E7 z9 `0 m
commons-io-2.4.jar
/ o1 D: Q) G; _# o; nesproc-ext-20211104.jar1 z& D! M/ m+ e* j
fastjson-1.2.58.jar/ Y- T/ x9 O% G5 s+ b C
gson-2.8.0.jar
6 V% L$ S" E7 h) ejackson-annotations-2.9.6.jar$ N3 G& B0 |' K1 h' }; _
jackson-core-2.9.6.jar
* Z4 F0 ?' r7 }; u6 [& r. a# Jjackson-databind-2.9.6.jar
& ~5 f6 O2 D7 Z1 t" Njackson-databind-2.9.6-sources.jar$ ]$ ?+ d( k+ v P/ ]' t
jackson-dataformat-msgpack-0.8.14.jar j9 L7 r& O! ?' S6 [# X
mining.jar
: s/ V( N/ F; `& _3 t2 t8 ]6 l# zmsgpack-0.6.12.jar9 V3 |3 _$ _% Y! G' P3 J
msgpack-core-0.8.16.jar
( F! X) U8 N7 `8 b" N
6 v. k5 U* o u2 w; E% W(b)设置userconfig.xml文件参数$ O' o: d: s' L1 Y* l" H
在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
' Z5 j7 p6 W% |. L# n4 S( I Q1 G7 o2 O2 }7 W" \7 l5 z
名称 参数说明
+ r9 h/ V2 Q( q1 h" D, J6 T6 }# hsAppHome 易明建模的安装目录
( Q" H: H# V) u" c1 DsPythonHome 易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7* ?+ c, t6 ~0 Q W5 y# p
iPythonServerPort Python服务网络端口: J& a; }. a- Y; o" i9 x2 _
iPythonProcessNumber Python进程数$ V8 R' H* P* B* E
bAutoDecideImpute 是否智能补缺" H3 y9 i/ x3 g$ @5 ]
iResampleMultiple 重抽样次数
* `" J; _" S! `; `3 o8 y2 g其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。& a9 }. Z% a) D
- r l9 E9 b0 ?& |9 ^, @
<?xml version="1.0" encoding="UTF-8"?>) c/ ]+ `" T5 a' Y5 H2 Z
<Config Version="1">( _- E9 K& z) O2 L
<Options>
7 o" }. A0 ]0 A9 ^. B6 d( a! @* Q <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
/ C2 L! S+ ]) ]" ^* x* ~2 f <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
[1 i, R- u* z1 r6 t <Option Name="iPythonServerPort" Value="8510"/>
* E) D: Y% H. c <Option Name="iPythonProcessNumber" Value="2"/>/ y5 c3 Y: S, q
<Option Name="bAutoDecideImpute" Value="true"/>
: b" h. l. n9 c2 l; v <Option Name="iResampleMultiple" Value="150"/> 7 v" ]+ t7 v/ }& s% y0 V
</Options>
7 @2 y4 q/ d! p+ _* i0 ~</Config>
! p4 F- z9 O+ @3 [! z$ g) M1: F* r; r1 \" |( W& B/ t
2' A! ~2 W/ [6 `' f6 K
3
; P7 T2 v1 S; k/ _3 A, ~- @1 b1 ^4
9 {" y3 s& X$ F& h' w5 C2 [ O5
! d- a* F: b% I' O1 Y H( d% g6
+ G6 Q$ i \. A( ]76 j2 ?8 l- L* Z+ q& h
8- V$ z6 W0 F& Z% P, H
9
) ?; j/ h& Z1 J% }6 x10
8 F! p& ]2 h L- n1 y11$ H4 K7 o- d8 C5 [2 C2 y
其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。, N$ o- {: C1 y! C6 W" e
; c& h% [1 @. j3 x; B6 r(c)SPL环境配置4 W3 z4 g' j1 ^9 L
1>. 配置外部库: I2 [6 t5 p1 P, l5 X6 A
$ G3 x8 t6 ~$ J, _+ G" C
打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
( }6 k1 i5 T: X: P
* q# a5 L% ~6 R- x# j* l$ d2 u
, O1 p Y: t+ Q9 t* n
3 s G1 @/ u/ S) y! T8 z在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。0 Q2 D, n: }6 Y1 R! k/ d; m: ?
" a4 x x3 O/ ~' m. \( G2 T<extLibsPath>外部库路径
: i9 t# M# ?& d+ ]1 V3 R5 b
J$ j: H" R7 r: C8 u<importLibs>外部库名称(可多个)
3 @' Z! r' y9 N; K4 v% \, e% h2 I3 A# v+ m( _4 y
2>. 线程数设置- O9 t& q! C1 {" s
, O2 U3 j! m! @$ F4 d8 b" H# o2 f% c- u如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
6 T0 L" X5 N% X: a2 P$ i7 u3 S
. H( {$ S# Z! W3 r
( K& _; |' |# @8 h; D: Y. A; N/ p4 k! @7 l# c- v8 @$ x
在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
7 s' |9 S, k6 W8 f& w* f6 |7 i& u! u1 d/ y9 Q
<parallelNum>最大并行数9 A B' `# F' o& d! b( w; d% f
9 E( d# `) _ y W C到此,环境配置完成。! U$ F' c$ t' u7 v2 ?
* ?! L2 D2 b8 Q4 m$ T
3. 建模和预测
3 ~2 U$ n9 b/ @4 n3 q/ {6 @(1)加载数据/ @6 H5 s2 G0 T8 \! i* ]3 f
SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
5 ?2 z; l o4 ]! Z3 N. X L$ z
; r8 L" p+ y/ }6 a设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
$ [, B/ N& H4 V& u
/ W5 @" U3 w' V' L5 M- a, D; y; ^! M( ], b1 H; U: Z
$ b" Q1 r4 q9 O+ g7 S+ e) E, k4 Q文件命名为bank-full.csv;
2 L0 f! N/ D9 k- ~0 D0 Q( W: K! j# ^6 ]* p; q- U7 W6 C, k
A4 X& {: _& t+ N0 n
1 =file("bank-full.csv").import@tc()5 [ k% X) H7 G. Y8 }. a o/ G
2 =ym_env()
! Y6 o" |$ E, Q+ b3 B) p B$ W3 =ym_model(A2,A1)
) I$ e% X4 W4 D/ [: Q: T* BA1 导入建模数据,读成序表
. D' P5 ?2 N, I6 w$ ` A# B, @ q/ T+ b' d
2 ~0 j( y* I" e0 d% S
1 U' D# r. O$ l3 G& v: ZA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
0 o9 W% \9 A' L; Y
5 o8 |) M3 a3 U9 k4 \A3 加载建模文件,生成md对象; s" ^$ k; @4 t i
- O3 j: Z# E- ~/ _
(2)目标变量设置和变量统计
a$ z4 U# T+ n& u0 q6 b# Z* q数据加载进来后要设置目标变量
; o G# _5 v5 g2 K8 P" F4 t
5 X3 H W( m8 d& X+ Y, a2 w& J3 LA8 \4 D, ?; ?8 L/ q+ G
… …8 j% u2 z, w: |3 G
4 =ym_target(A3,"y")
6 ]" n/ a9 Q* d5 =ym_statistics(A3,"age")
. y! f6 Q- r- M, h' j: s- O9 v6 =A1.fname().(ym_statistics(A3,~))
3 i! g. p7 M* A$ j( cA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。: y9 v, K8 `, o4 J/ U2 V: z
6 d5 O/ h3 U& a7 T: u8 LA5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
M: a) |. D5 H+ c, H
( Y0 V. K+ K- o8 {8 D/ x- A t) C" _3 u, N
% {% Q! \! x$ R8 ]$ {
A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。# g. d, d, e c* Z0 u' _# D
0 ?! I- ~- Z' k: |! v* Y2 n. l* T+ m# p- y
; a) e7 T& }4 c2 m, C(3)建立模型和模型表现$ j% Z3 @( s1 w5 e6 _) T) R. }
A$ u9 x; c6 ?1 q+ d
… …
- d4 P) M/ u6 V& S# _( ~7 =ym_build_model(A3) O' N# Z- O/ t0 W1 f5 i- a
8 =ym_present(A7)8 Z. H. _) Y3 ?2 Q
9 =ym_performance(A7), D4 v, A+ m1 e: X3 ?5 f
10 =ym_importance(A7).sort@z(Importance)
9 Y$ M0 J r! q7 w: ^& ~A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
- C/ O( V* o! ~. Y1 [( @" y1 C5 _; v/ t" M5 a @0 [' ~
模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
6 x0 n o5 z$ d* D! I9 S5 p% n& b& M1 _7 Q
A8 返回模型AUC值及参数
1 I7 U, x, x5 ]- K2 v4 x0 v2 c8 M( O. G6 {
- Q2 M8 a# [) t3 P9 j
9 b ]+ E2 i- K) S% W* _+ {
A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……, X& V0 i8 E( t A& ~8 T
" x: m* H1 g6 G* x, n/ j7 V
. P$ O4 W8 g$ \8 |& e
# t, D- `, c) _2 X比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
: D( q% K1 g8 v+ H8 t4 E: o& U: ?
5 f- x' N$ J) C; t# H9 ?
1 f* z5 X$ H: i8 V8 c
A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
- K8 f9 N. ^% n* O& ^
( n. @' C1 I1 [4 R3 S. F3 ~$ O6 w% R1 H' t6 H6 c
' ~+ A" T$ C/ I5 `5 G/ V0 A0 s$ u
(4)保存模型& y# N$ X& \8 O% t* J
A4 U% E! E7 T' `% _% h) S g
… …8 _- _8 B( f! Q& \
11 =ym_save_pcf(A7,"bankfull.pcf")
" y: b" R3 [; n12 =ym_json(A7)) C" c3 a, V: `% F0 N) ^3 R
13 >ym_close(A2)6 c$ b$ _( |$ j9 B5 m
A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。: l9 T% T. H m- W9 L/ a; `% h
2 m& ^2 O( h. WA12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》3 ]. P8 f9 o: n) I% v
% A4 W5 b, U, @- _( {( y" {A13 关闭环境,释放资源。) u- l9 w) D! C
) i+ W' F) W, C0 u0 Q# J
(5)预测
% t8 @- Q1 S6 S7 S: |8 d预测之前需要有pcf模型文件和预测数据集
8 G0 G7 Q4 v4 m' A& F0 a# o, {! B3 o
A- w, E1 X( s2 k% m0 H5 l, n# s6 d
1 =ym_env(), s* }% Y' K7 w6 m5 E& Y
2 =ym_load_pcf("bankfull.pcf")5 V/ F7 k' [# @: g$ T, D4 I6 @& [
3 =file("bank-full2.csv").import@tc()# e! t: s v3 u2 o% s
4 =ym_predict(A2,A3)
3 }& f* X. h4 u9 D3 c; X5 n5 =ym_result(A3). w1 _% Q3 ]7 o H) S+ @6 M5 T
6 =file("bank-full_result.csv").export@tc(A4)6 Z Z- o2 A6 _. G. d7 n
7 >ym_close(A1)
$ @, L, f+ X hA1 初始化环境
/ Q; ~% v7 Q0 [0 d# z4 `5 @5 a8 j, X% Z, X" n
A2 导入pcf模型文件,生成pd模型对象。
# U! M: W& u. p o8 c- c5 f; U
A3 导入预测数据集,读成序表
2 V [& l! y1 v3 p
" V% n& [/ f8 R+ [0 RA4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)0 U- ~4 B7 F2 {+ E# ^( m4 R
. o6 i% a$ l1 S5 V/ DA5 获取预测结果% _: S4 m' F2 \3 Q4 H& Z' K) A/ T
0 d0 ~! ~2 M* y- V# P5 Y( fA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
6 p& Y2 a0 Z9 K* c# h
$ k! C( ^$ E! V2 q) ]0 A# j" L
; w- V U) t5 z; tA7 关闭环境,释放资源
2 p( q S+ K% a3 m p4 m% t& B$ | U0 e: D3 K4 S; y- a; q
4. 集成调用
( I$ I/ Y5 g: ?+ r- N# ^: uSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
2 A4 w. N8 V% p) w4 a; W# y0 c7 p& Y$ l$ | U, P* L8 E9 w
总结2 p- j1 S8 g" U% g
使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
/ K/ }( ?" ]2 L' T
, u' b& }) F! i+ eSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
! [# s+ p2 h5 I% g, |————————————————% a' Q% n b1 V
版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% d4 s( @# k4 o
原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
2 B$ |7 G) R2 k9 A8 z/ O* \( u7 Y8 F+ p8 f; d9 x; m5 y
1 m# j$ d ]$ M: t3 ^* d: A |
zan
|