QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1994|回复: 0
打印 上一主题 下一主题

搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-7 15:33 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错
    : W$ G; U( X8 H& `- x4 c" D! k4 @+ M2 o3 X$ A
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。9 i5 J' Q- W+ b: }  q, V7 E
    5 Q. t1 M4 X6 ?6 S/ j
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。8 C+ ~- q5 {1 d. ^# m! L

    3 b+ L) \: U' B/ e1 z6 {4 M9 m5 S# w1. 确定目标,准备数据
    ( f1 y  W9 w6 b, @" k建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。- m( z( K$ _0 \( G
    / s+ W: w' w# X2 `) J
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:2 a- T2 q* y, M8 ?
    9 e3 y+ c: y7 S/ B# q0 f
    首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。0 _3 l& s6 |: P4 s9 O: j- s  v

    8 x! J+ F0 K# i* a8 |+ J除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
    / d% Z2 P! A6 P( I) c/ m9 Q/ F
    & h, _8 b% a  V2 A) M: d采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。8 S" N) h1 Y$ z! ?/ x% E

    . Z# d- I3 Q" p$ p准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
    4 f6 K- _+ D3 d) H3 E, g
    1 {" o6 b) y. x- z如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。) S* E4 h; [' _- n5 J9 b/ c5 n! |

    ) y. {# F+ ]  c! I2. 下载软件,配置建模外部库* j2 k2 y/ i& J  R0 {- K- X' H
    SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。4 \8 V- J* g! B: J
    , O" w1 \  g0 i1 P
    (1)下载安装集算器(SPL)和易明建模软件
    * e* M. D& T: ?* B/ E( g2 L集算器下载:
    0 j, T. i' E% `. D; C“http://c.raqsoft.com.cn/article/1595816810031”
    6 `1 f- y4 M  a# Q& h. x/ G* X2 W! r- |/ Y
    易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
    # U. [* f) N  V' t. P5 w& h- k: [9 F6 s
    安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
    % Y3 }8 K% R) `3 a
    & k0 W. Y. g: P. `0 `/ r
    3 L& r5 p% L& m" h$ K9 e3 b6 A4 v8 b, v/ U
    (2)在SPL中配置外部库3 Z6 ]' b* @2 F6 h% n. C, o. \+ n
    (a)复制外部库所需要的文件
    % H( W" W: G1 X; ]5 d在易明建模的安装目录下找 YModelCil 和 lib 文件夹
    / X, c' ?0 m5 n3 O+ m8 J) Q' j5 Z2 k7 Z, q, k

    ! l6 p, u( a3 Q7 G- u9 `3 s$ D# [' m( T# _0 ?8 M0 e: I
    然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。8 D) f% H$ b1 H, |0 S% l
    ' D9 M3 a9 ^1 o" B+ {$ \9 K" q
    建模外部库所需的文件有:
    , }- C! ?5 I  s% y
    5 Z6 s' g! j3 ]+ p7 l8 X3 R1>易明建模目录的YModelCil中含有以下jar和xml
    . E3 x  m' s6 @  Z1 ?- m: @6 v4 J7 @( C: F
    ant-1.8.2.jar
    1 O. r+ |+ M$ |2 d0 X) s$ rcommons-beanutils.jar
    ! ]3 l) ]5 V3 q+ acommons-lang-2.6.jar7 D, U6 V$ p8 v; j
    ezmorph-1.0.2.jar# |6 s' T) i' G- ~
    json-lib-1.1-jdk13.jar
    , q; [% J1 ]: O6 Uraq-ymodel-cli-2.10.jar6 X7 [3 K0 ~( A5 T7 t# _* {
    userconfig.xml
    4 S4 v# z% [4 y* x& @) N% L% U- D* `) Z# T! T
    2>易明建模的lib中含有以下jar
      b1 J3 X" _' O7 |2 k3 v
    6 }9 W  a: Y: z! h( W# L+ X& f) u, Qcommons-io-2.4.jar$ h/ s5 X, D$ {  N$ @
    esproc-ext-20211104.jar
    , N% t2 J0 P& ]9 b) v" _8 d9 bfastjson-1.2.58.jar9 o4 d7 b- A6 X: H. X
    gson-2.8.0.jar
    ; ~" `" [9 Z& J4 S6 ]) i3 h% J  A1 hjackson-annotations-2.9.6.jar. v$ {# e7 p7 `  ]. Y+ A
    jackson-core-2.9.6.jar3 }6 v4 p( y. v% ?1 f$ J
    jackson-databind-2.9.6.jar
    & i8 d! `& e, R. C/ |# |jackson-databind-2.9.6-sources.jar
    ' z- S' P2 _6 D" m3 Xjackson-dataformat-msgpack-0.8.14.jar% F4 \- D+ y5 k$ ~- Q
    mining.jar
    ! C- g; u, \' v& Lmsgpack-0.6.12.jar
    ; l. v" Z6 b! A' nmsgpack-core-0.8.16.jar
    . ?1 o( y4 e1 {2 G
    * Z& }3 J' U8 {(b)设置userconfig.xml文件参数& Y& z! l& v4 d* g( j' W! y' V. m
    在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
    ) n5 \$ i$ O6 g# t% z, q8 {  r1 n) T# i) K
    名称        参数说明
    ! |  A8 [8 `- _: wsAppHome        易明建模的安装目录7 ^; K( I; |; T- T" @- w! V
    sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7) [/ {4 R( C! r' N
    iPythonServerPort        Python服务网络端口
    , e( i3 J+ i: h( c0 ]' m/ T$ HiPythonProcessNumber        Python进程数# Q8 S+ j* ?! y6 R- f1 f
    bAutoDecideImpute        是否智能补缺$ u" W9 W2 V2 m8 _2 k. O! d* f2 V
    iResampleMultiple        重抽样次数5 d& K; S$ ?8 f6 `
    其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
    # J' j  {" y$ O9 p( n% _
    ) |+ X# |, m, y( K* b<?xml version="1.0" encoding="UTF-8"?>
    6 u: I' h  v9 f" `1 |<Config Version="1">% X0 Y  b3 D1 O
        <Options>
    ! D! {. }! h( k# t( B        <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
    ( d' _8 @/ E" ?. j' D$ I3 n                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
    2 _6 g: d4 v0 |# `+ d                <Option Name="iPythonServerPort" Value="8510"/>
    , V3 O. J; Y$ Y3 p' N! _9 x                <Option Name="iPythonProcessNumber" Value="2"/>, n. |- t( x1 {8 D* b- Q* ?, y$ ~
                  <Option Name="bAutoDecideImpute" Value="true"/>
    6 U1 i7 }5 h) T& _5 U. R$ g' Y5 u; u                <Option Name="iResampleMultiple" Value="150"/>                                4 }9 o- ?8 y- v* g. t% I6 a
        </Options>9 p5 Y$ e: {) k' T$ r
    </Config>
    * h: w/ H& m6 J6 W4 }+ P4 l1 p1
    ! R6 C4 h7 c9 Z) p, d# o7 I2) a, m# D- f1 u3 m
    3& r* `% q7 f0 Z& Q
    46 d) {' U) ~9 V# i: ~7 M3 a
    5/ Y" h4 Z& C5 C+ g' }" g) \
    6
    3 T8 y, d+ H) D+ G7# }# E+ T! E8 U+ ]9 t( ~5 X- U
    80 F4 X# t, T1 c: \9 B$ J
    9
    $ O" T7 k( v( X4 X! U10
    ) w4 Q/ }7 i1 ]7 s( B116 I/ J7 [% Y5 R+ A
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。3 q* K- z3 y+ N1 q' ?
    $ {6 B; V7 g0 q; H% T3 `; a' K
    (c)SPL环境配置7 g& ^" J" v* u6 i
    1>. 配置外部库
    0 j) P) P! p9 w0 k
    + h, O+ A1 j& o; ?: }打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
    3 t( x, [2 a$ S7 L- a- I' e
    ) w% k+ r' h, Z( F( x0 [' A/ r/ E3 j& _' |6 L
    ' p% y! B) O0 t0 D" |+ b
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
    2 F. q* g: k* c1 v# P/ q
    : E8 G( W+ H& W3 P# C' C<extLibsPath>外部库路径
    ; H1 b) o6 F. l1 K' ?+ E
    ( ~; b. l% J" O" M$ X<importLibs>外部库名称(可多个)
    & j7 t* @% l% e% U0 f
    / Z; W9 ^  G1 g2 V2>. 线程数设置
    . m+ A7 r- z* d# }/ d+ a+ w: s2 [. X
    如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
    ) T% @+ h7 [3 B+ X. W/ A' X2 H3 m8 W

    & ^  l0 ]; {7 H) ~. M6 l% X# J  F# x: d2 K3 M
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
    % K: S7 f: I& D5 p/ l
      P2 E5 G# l3 w6 e" P<parallelNum>最大并行数
    ; }3 D$ g- |% I( [( e' C: r5 D+ o. W# L5 n! [  o
    到此,环境配置完成。
    ) _% B: g& b% D2 b: f7 B. b5 w2 F! m9 J' f" F
    3. 建模和预测
    7 G. O0 m1 |5 M' J: n( l9 ]/ \(1)加载数据
    / U! M$ {/ g+ d" F6 g6 YSPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。1 Y% x# K* l8 E; t: |6 Q: a
    9 y) z8 S/ N1 Z
    设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
    * i7 J6 y( [3 r- f1 L
    7 m) Z7 D% v& h, q9 c  H; k8 A2 b3 v  \6 I) x

    * Q" u3 v+ @7 y& |文件命名为bank-full.csv;
    ( @: V; C+ E1 @; w8 V* e3 F
    4 v& X% B. Z6 Z# A) TA  D' ]8 P9 ~- |/ `
    1        =file("bank-full.csv").import@tc()2 q7 i( `1 B  S- }. u  j3 g0 S) Z
    2        =ym_env()8 D) O9 ~9 f  {" A2 E1 ]5 S
    3        =ym_model(A2,A1)( n  e: q. E6 u
    A1 导入建模数据,读成序表
    5 l/ ~( c" W6 D" O/ l
    5 r3 _$ |- ^+ s3 ]6 M0 I0 ^, n) W, j) R3 E" B

    ! _6 J4 J, l7 W) S" qA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。  [- J9 A0 i8 [4 Y" l1 r( F
    3 S4 F$ I. Z9 Y) N. |/ E5 m; |. |
    A3 加载建模文件,生成md对象" N  G; M% m. W1 D; K
    - t4 s( I: S* _+ Y; [, S# L$ ~+ L  y
    (2)目标变量设置和变量统计
    2 s2 g  Z! I2 O/ n数据加载进来后要设置目标变量
    ! b0 [. _  E1 ?, }& `* {! m2 u, o3 d
    A% q# j* A+ C/ ~' O2 {! |  \
    …        …& I8 }6 w1 U  w( N
    4        =ym_target(A3,"y")6 u$ D+ R# R3 C
    5        =ym_statistics(A3,"age")! h8 q6 e' G5 r' l+ X
    6        =A1.fname().(ym_statistics(A3,~))
    , u  m2 ?; T7 C, L1 U2 D& ZA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
    . f0 F8 g  ]/ G! m: E+ O& w8 Y& h, }. v! `2 g  @6 B9 m
    A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
    4 m% _. ^( u- v, b) D7 O/ U
    / C3 K9 ]% g) b; Z) h) k0 _9 E) j2 G, H" P' _( i
    $ C# A, S9 D8 N+ @: e- g6 z% P
    A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。6 J4 B& d+ E7 n4 D

    $ z1 N3 G' I# k; @1 U: w5 \
    " r. ^" w4 X; d. G5 ^
    $ I' p. H1 V! J; t, K0 K* [(3)建立模型和模型表现
    8 ~0 U* [- |8 v& I$ W3 ^0 L& MA2 m8 }( k1 T) j* n6 @3 X+ a
    …        …6 F3 V6 W/ y1 Q0 @
    7        =ym_build_model(A3)* j6 i- W' R$ f/ S( k8 R% W: v7 U
    8        =ym_present(A7)9 h. Q1 \& E8 ?4 {& Y) H( x
    9        =ym_performance(A7)( c+ c, u0 V' b& H2 ?
    10        =ym_importance(A7).sort@z(Importance)
    + R& m1 ~) M. g) j  z& _A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
    % w  b& V; |' J
      R% P" v/ {2 y" q' g$ q8 l模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。6 I  {; a" N4 F( G
    & x7 A& R5 e# N5 x) w; S
    A8 返回模型AUC值及参数  H2 k1 _9 N8 l

    & l) t% C" e  y  u- U; U  X
    # y- n0 B! D& t& T* V$ N
    ' c! H% m2 h6 v: ]* JA9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
    - \4 y$ K5 @! |* a
    & o6 N" @  f; p/ E( k" Q9 s
    ' x" \2 A, j' k
    5 i( L; Y9 p( b' p比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    " J  i& r* l* }; z
    ) Q6 X, `' C3 f8 T) }# w( |# b, A0 e8 e4 M  K
    # O& m# r! d3 E( T
    A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。7 W" b7 a# R& F

    : e, u- J; P5 t/ [( w- p( d! Y1 [+ Q9 W+ T$ I5 q; \
    ) Q. a' t  g* M! M- G
    (4)保存模型: }- G, N" a1 a* e( I
    A' s0 @. }4 y' e4 Z8 H
    …        …
    ; j$ G" ?4 O& L* h) m8 V11        =ym_save_pcf(A7,"bankfull.pcf")
    / h. i# P" I% t, l5 s. G12        =ym_json(A7)
    8 T/ \5 |+ A+ l% Y& x* t13        >ym_close(A2)
    , i- S- W3 ~8 d7 YA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。7 `5 b: O1 W2 R5 S

    8 `7 V9 _$ g0 m! Q. ^, x% EA12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
    ( i9 q- X5 M2 u2 p2 a! S9 `& N2 z6 H# D7 d- {& \7 i
    A13 关闭环境,释放资源。4 y) M* P* T  U# H7 H8 I0 d* y

    3 q! u. N$ l5 e+ |7 j! h. F(5)预测( o/ K/ R# ]' V! I
    预测之前需要有pcf模型文件和预测数据集) {4 Z0 P$ Y7 l& r9 w/ Y
    ' C+ y  `  a. {8 U9 ~
    A' _) R2 d) ?# l2 w; V2 p
    1        =ym_env()
    4 A, f! k# L. Z1 `' y' y2        =ym_load_pcf("bankfull.pcf")& P5 u/ @. S8 r6 W" |
    3        =file("bank-full2.csv").import@tc()7 H: I" `8 K1 z2 m
    4        =ym_predict(A2,A3)
    $ X1 ~( D" h( t# j: u5        =ym_result(A3)+ c  w' d2 K+ [/ B2 b* d
    6        =file("bank-full_result.csv").export@tc(A4)- R9 s$ q5 z+ f( d, E
    7        >ym_close(A1)
    , q' l0 q* E5 B  X/ x" p. UA1 初始化环境
    % J- o: G0 {/ l9 S8 W8 `2 F% [0 w" s
    A2 导入pcf模型文件,生成pd模型对象。% G1 U/ g! K  G5 n0 }
    9 W& e! K; C; n$ ~  b, t6 [
    A3 导入预测数据集,读成序表
    2 F  x/ q7 U  b$ D  U! G: l( D; |  Q3 y3 @5 v
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)% z1 k, L- H6 }, ?: p- r
    ) i: d3 k& w& g, C7 t/ q2 b
    A5 获取预测结果
    " U, Q! x* `% X- W6 u# ]* B4 ]$ ~/ n+ M( }
    A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
    ' x( G; P& b6 ]  r1 \5 y& G% X- L' @6 N& t8 g1 P) s- t

    ! M5 z/ @1 h- D" U3 a4 `% ^A7 关闭环境,释放资源
    ' D- X7 _; o. t' F6 D2 B) c' D/ k
    4. 集成调用+ T# M, t6 N& F9 o3 |
    SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560" [: \5 k# Y7 D) K3 }

    : e3 h2 a1 \! K/ }$ F( y总结) s5 }2 o8 V3 R0 w7 e0 G
    使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。9 p& |+ `" p- h4 q+ K. ~- m) e% C

    2 E* t2 S! y4 P! W6 g0 kSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。; N" W: [: Z3 U
    ————————————————5 O$ R4 ]  u8 v. g7 |
    版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& D; C8 r, A4 R1 a
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
    " d5 x# I6 _9 J; c+ W. z
    : D: E+ N6 X& U2 Q
    ) S9 l+ G; P& `* C  U
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-13 17:14 , Processed in 0.419861 second(s), 51 queries .

    回顶部