QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2076|回复: 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 也不错  }% ^0 X  A0 o4 [( N. @) R) a
    + i* F3 `/ l+ W" t! _
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。" k! {( W* B9 |) ^) i/ h3 v
    , E( `9 q" L3 q+ W* I% P
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
    , u" k/ d# ~/ j) q9 A
    # d8 j- Q. S8 m) [. H1. 确定目标,准备数据1 g2 K5 ^  @* c) b( u
    建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。9 n  N" ^5 ~# P4 R0 @

    5 T5 S5 v3 d% g( y$ ^& [历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
    7 f) k, M7 u  L2 X, O3 k4 `- h% M9 v2 [+ U7 w
    首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。  O" ^# z( O5 a: N9 I# `7 ^

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

    5 [# W8 [+ A  e; j1 t准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。; G" B  n. p# q; a* K
    ! E2 y6 J& m( b
    如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
    ( |( F- I8 ~; L- J% Y8 M5 O: l) R6 T% O9 Y: n( y) d
    2. 下载软件,配置建模外部库
    + V/ {5 U( n* x! ?  Q' v4 {3 JSPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
    8 r- Z. t5 x% j: I7 F7 ]
    3 H5 F% {) l# r# F% A3 }(1)下载安装集算器(SPL)和易明建模软件/ W6 M# P9 c. l* a
    集算器下载:7 i4 D' N" g& O4 e" z2 {
    “http://c.raqsoft.com.cn/article/1595816810031”$ z* a# V1 q  ^9 \7 d

    - N+ T) A9 J1 f$ V易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
    3 Z2 n& C* Z* z/ z+ H
    % K6 D9 T+ o# [6 {安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
    # O2 @' g+ m( f* e
      l* J# l3 C% |  h/ Z' I) q( k) h; I; T# }

    $ b6 {. R" H2 f(2)在SPL中配置外部库
    , {  |; r  g* d" h* s(a)复制外部库所需要的文件  q6 a8 N9 P0 Y1 g  w
    在易明建模的安装目录下找 YModelCil 和 lib 文件夹: S3 l5 b) z& u8 i4 Y4 H0 p

    / f+ t" G7 @2 C# Y, s3 Q) V% c& w
    ' r, T/ Y6 w" I9 [' `2 g, P" p3 y4 g* ?* \8 J7 R( r0 ]" R
    然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。( V. Y' }3 W* w4 z4 X- Y; R1 }

    7 i# |2 @# L9 x5 b: E建模外部库所需的文件有:: I/ L4 e' v# e+ S3 Y

    0 c% S7 n- [- v0 [8 {% d. U1>易明建模目录的YModelCil中含有以下jar和xml
    ; O; e. t- F3 Z; D
    % i  C1 F. C& T. J$ ]3 Nant-1.8.2.jar
    / ~8 Q/ U0 u/ C/ {6 o" u4 Ccommons-beanutils.jar
      [* K2 u+ F7 z  fcommons-lang-2.6.jar/ d" W, C! e. N, H
    ezmorph-1.0.2.jar8 [$ T4 b7 b+ A$ `0 ]
    json-lib-1.1-jdk13.jar! Z" U- O3 Q8 m9 E7 M
    raq-ymodel-cli-2.10.jar6 m3 Z/ b7 L! e4 @
    userconfig.xml! Z2 U$ W! w1 d* V7 b; Q
    4 r* q7 y: @* N; z& {
    2>易明建模的lib中含有以下jar
    0 H! H$ @5 k5 ^1 X- u& o' [
    ! Q5 r4 H% D/ q8 D. tcommons-io-2.4.jar) e: O$ Q# X  f, ^, _! ^
    esproc-ext-20211104.jar" @4 X0 W! O1 u5 P0 f
    fastjson-1.2.58.jar
    ' R5 J3 H; J/ ^! jgson-2.8.0.jar& w' E4 M# d: L9 ?$ P/ u# A0 W
    jackson-annotations-2.9.6.jar7 v' d& D# p, W( f9 j/ Z  H* u
    jackson-core-2.9.6.jar) D3 `1 W$ N  S
    jackson-databind-2.9.6.jar
    ' Y. b) F. B0 Y* o4 P1 ljackson-databind-2.9.6-sources.jar3 v& x/ K& i" i! }/ X
    jackson-dataformat-msgpack-0.8.14.jar% b; K8 E8 Y/ y" j2 N
    mining.jar
    3 G- {$ a( ~. \/ V& n$ Ymsgpack-0.6.12.jar
    2 z# Y, U/ @* Y3 @0 zmsgpack-core-0.8.16.jar3 K1 I9 n4 M: Q$ t& J5 O

    $ ~7 Q/ R0 F: {& D' D0 o(b)设置userconfig.xml文件参数: p: H4 N0 _5 J8 ~! u- j- @
    在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数  F* A- l+ d: J. E3 r0 g
    8 y( V5 J1 ]* R  p5 p" A
    名称        参数说明% F* z3 }; u/ A# u: N& q0 H' ]
    sAppHome        易明建模的安装目录: ?% V% b2 u8 g" i9 p* w
    sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
    8 ?% f2 D/ V1 diPythonServerPort        Python服务网络端口% h0 [8 E( D/ ~1 @
    iPythonProcessNumber        Python进程数/ v+ u& `  {* Z' ~' q$ z7 x
    bAutoDecideImpute        是否智能补缺7 e+ F4 q3 b! z4 A) S
    iResampleMultiple        重抽样次数
    % ~4 u& ^( u! K9 }* D- O其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。0 J( h. f* S3 @  {6 D, |

    $ n1 Z) r5 D, l* W3 J5 e( }( w7 n<?xml version="1.0" encoding="UTF-8"?>4 ?! k2 d7 I; l  L( U% l
    <Config Version="1">
    1 N$ c9 T$ ^! m! F8 l, _0 k1 }5 b    <Options>
    ' ?% }+ Y5 u1 y8 X1 [) C# @" b        <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
    2 ?+ V2 j1 d7 C: C+ n; o                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>* S( x% `  C8 Z% K: C
                    <Option Name="iPythonServerPort" Value="8510"/>' o+ U% ]3 p$ K; W) H
                    <Option Name="iPythonProcessNumber" Value="2"/>% c: w& Z3 {# r; a, N3 R
                  <Option Name="bAutoDecideImpute" Value="true"/>
    . Q( m8 ?) f. L7 m' l3 b                <Option Name="iResampleMultiple" Value="150"/>                               
    & j+ B' f% a3 |6 \: U) F    </Options>' ]' T& ?; S/ r3 k  n# o
    </Config>0 ~5 B4 F2 ?' G2 B( l) n+ x
    13 w1 |/ v0 J/ K3 s8 ]
    2
    5 b0 o7 k& [: k# R5 F# d8 ?5 y, E) r35 ?8 s: M, L. B, S9 U+ k' I: F  L. B
    4
    & ]7 V, G& ~, o8 ?0 t$ z' k5
    2 u  c0 {4 {- D# _6. L3 j+ V8 A! p
    75 f2 p7 B# o  N& i7 m. ^1 ?7 t
    8
    ; E0 f6 @" c! Q5 _9 t9
    ; c% S0 `! i, Y+ M- Y* N' }. `101 [+ i% t$ b! k* R
    112 I% G( R  |' n* E+ D9 n
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
    . [; }+ C; H% n1 t( ^1 J, V" b% D; J& _- Z! D2 a2 b
    (c)SPL环境配置
    " |) M8 V! D4 g1>. 配置外部库
    2 [' ^$ t" N4 _8 A, o* U# [/ b
    7 |) x. Z$ u6 u+ @打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
    * G- y% v( E. d1 A% Q: `) M$ V6 o3 p, h3 P& @) I

    # Z: x8 U5 g1 D; x6 ]" m, u# n4 Q; p8 c/ Q
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
    5 C- u9 J" V! R6 j- k/ ?% `
    ! s& v( W6 L3 a( }* s<extLibsPath>外部库路径/ V# S) p% j4 T' ?6 v! c
    , s/ v9 z$ w  e; V
    <importLibs>外部库名称(可多个); k3 R0 V' Y& }8 L) O8 s
    , q( Q$ y' v7 j/ T, c! K5 N* J# H
    2>. 线程数设置7 J* g, s1 p' i

    + v7 `" _6 @+ d7 i! j9 e如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。0 x  M; z; }$ b) p

    . I( Q9 Q* ~: U' a" _
    ) Q4 I+ |9 O$ {  ^5 v+ ~" M' y) C- [* P' V4 u0 u8 E. c( C
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。( p7 `5 ]- N' W( J& C

      b) f8 G4 Z6 f<parallelNum>最大并行数
      N! D8 {: s9 m1 z$ _  T: D3 p! c2 I( G2 }' A) P# _
    到此,环境配置完成。* T5 F( a* Q  B. B1 M: a8 m; K

    , C% e' O% l; S3. 建模和预测; h2 M3 o2 u0 U1 h% D
    (1)加载数据2 u  L5 y7 _+ k, ?
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。- K9 x- u. d' W- l- J7 X2 u
    6 U3 m8 G) A. X1 x& b; ^
    设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。$ m: i5 }& H! \9 N+ S

    # K4 K2 O4 q! ?6 O- U# }3 `" C! F9 U1 |
    9 e* h1 o& f" {' D: d1 g# U/ d' X! G, L. |. A. v0 {
    文件命名为bank-full.csv;
    ) j3 U. X6 M' \' \" e
    3 q# d) V! V6 TA
    * H& X! Q9 Z, k# k. W) H1        =file("bank-full.csv").import@tc()( A+ U9 a& K" O
    2        =ym_env()
      e, g/ X" y% v3 c3        =ym_model(A2,A1)$ ]1 p( g+ f% \  V9 e/ ^
    A1 导入建模数据,读成序表
    2 U: q5 g) V' {8 J9 f
    ! z$ Z7 [/ E9 `8 J. ?; U
    : O% F2 C2 g0 V5 _
    7 I1 A" P9 W1 l; L& K. x6 ^4 rA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。  ^! I5 r+ c# Q" ?5 R

    & A( G# |5 I$ I$ i# R, T- aA3 加载建模文件,生成md对象
    1 e2 p# h  Z. a( S# T8 O" I/ X
    * W% i0 D* A  G/ ?0 B(2)目标变量设置和变量统计
    * k- `8 {% P( @; F4 U数据加载进来后要设置目标变量
    " `% d& ~! K- U1 W% `
    ! {0 @+ P0 z5 |A
    , V* [3 K" T2 S5 f…        …
    2 u( Q: p& q+ O: J/ j) B4        =ym_target(A3,"y")7 q+ F1 X4 \* ^# D8 ?
    5        =ym_statistics(A3,"age"): w6 [1 Y/ R( k" o
    6        =A1.fname().(ym_statistics(A3,~))/ N0 S' A0 v. }) d7 X9 E* D
    A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
    . a3 M! n+ ~2 l. `+ A# a! o' M- ]6 E+ w, }4 b+ I( P
    A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。$ r9 x4 j1 _8 z$ Y
    # g2 V# a6 ?3 X* P" P* p& D- I/ P, c
    5 F3 C1 e# g  o0 U: F

    9 p% o4 e+ {+ f& Z0 X1 u& \A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
    ) E4 |; v0 d1 k" D1 F+ \; q0 U& w3 e9 P8 x, X8 n2 }
    % R! F. f; d1 n; w: C, z1 f

    / t/ b: U, H1 F: `& r& v(3)建立模型和模型表现) c) l4 V; L9 }8 k
    A' n2 g( I  G8 D- b
    …        …0 A! L3 {) t1 d6 o1 v# ^
    7        =ym_build_model(A3)9 f: I4 B! m9 k$ O4 _" V4 g
    8        =ym_present(A7)6 z* I+ T/ y8 }6 s4 G# W/ B9 l0 _
    9        =ym_performance(A7)" b, Q' C5 r$ I4 f
    10        =ym_importance(A7).sort@z(Importance)
    1 N( }$ c. K0 v6 AA7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
    7 S+ h$ w4 u; U& J+ W
    / X8 k6 w+ M2 I$ j模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
    9 Y# h) E- w& u4 L0 q6 [2 ^/ e# o& K! q$ y5 Q( x7 S
    A8 返回模型AUC值及参数7 Z! H6 u' C. j1 ]

    8 W1 N7 v" d1 e6 l
    3 \" I7 M! A5 y$ t2 R) q6 i! \3 U' e4 b5 C4 b. _. ?$ X
    A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……8 a! z8 _  R+ P- g( \

    2 {, O# I/ v( }0 h
    : U. Z2 D$ r1 h0 G; _
    9 k. i7 \" Q% t1 Q. A' N9 R' ]! e$ l比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    $ z8 D2 h, F- S1 \# w0 P
    4 H$ e+ B2 w6 O$ v) h
    3 F- i' O: y$ R+ ~7 g$ k; I1 d2 |" Y% a0 R
    A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。* F9 G7 @2 D: Y

    ' D" |3 J2 V& F% x
    4 [# J2 c) @  {, o- Q& w1 C2 ~
    # R: p& G0 Y5 E9 C(4)保存模型% b* }" H5 N1 z3 c
    A
    ; _& A- h3 H6 E. m% M…        …: {, N/ K$ D+ {9 e; d  C
    11        =ym_save_pcf(A7,"bankfull.pcf")$ u+ v9 h' a7 I  G, Z( `6 [9 ?/ d
    12        =ym_json(A7)
    - G( w( M* s0 c/ G13        >ym_close(A2)
    9 ?5 y0 M$ K+ ~2 H; l/ b" k, x1 vA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
    6 c& W+ s' R6 Q3 g8 {
    # d% u# n) t8 C, R( {+ {A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》1 ?/ G* S4 n! D# Q

    : r" X/ `" a, a! pA13 关闭环境,释放资源。# L  K* O: J  P+ z0 q# Y( B+ E. l

      I  u% H" s# Z' }7 Q. |6 f(5)预测
    & L  k# p: E6 ~4 Y! X" \; O预测之前需要有pcf模型文件和预测数据集. S4 L, h* G/ }# f$ z

    % w- j! D) @5 e7 pA8 @4 n* _% `3 X7 o; a9 U
    1        =ym_env()$ v( w- o5 d* H1 u
    2        =ym_load_pcf("bankfull.pcf")
    4 c5 F. A' C. W; f3        =file("bank-full2.csv").import@tc()
    / M1 @# K3 z% K" L4        =ym_predict(A2,A3)
    # N* L. }3 e" ?% K$ \5        =ym_result(A3)( W: K; a# k& b8 _# C8 {% ]
    6        =file("bank-full_result.csv").export@tc(A4)2 o5 M4 n! O  z' A5 C. G7 v
    7        >ym_close(A1). G/ d: K9 j1 p; ]: j0 O6 n3 Y
    A1 初始化环境
    4 ~8 K2 Q6 z5 A5 s8 u0 B' `6 z6 w
    A2 导入pcf模型文件,生成pd模型对象。
    2 \, U3 @6 `3 Z; i% m
    / C9 x+ o& y# [A3 导入预测数据集,读成序表  |! E4 R8 D; g6 _% x# w! d
    , w+ W; e1 R! T, |* P1 ?, i
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”); A5 G# @4 l( _
    : w1 e$ u2 D4 m7 _
    A5 获取预测结果
    # S2 ]/ a6 W5 d/ n; g% x5 T0 F9 m. H' z1 z
    A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。0 n" e% H3 ~7 b, W! W2 Y
    9 s  d3 K# y9 ]6 r

    3 D- F" |5 T' |A7 关闭环境,释放资源
    ) v; x3 z- N& |& _4 s
    7 h5 S) r5 v& Q& ~/ H3 ]4. 集成调用: ~) H3 j: N. R
    SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
    : [9 s: K# D; ]7 }' H- c6 t5 M+ V4 A3 F4 S, u! f9 O
    总结0 z/ I$ o9 o9 @; Z1 J# s
    使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
    5 R- N) A& H# _, U8 F. A
    / J# P9 b' A, V- Y- C" X7 ?, rSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
    ; B# `* w+ D& V; p9 E8 ~; G————————————————, }7 X. W( g' }9 q) O& K
    版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - ?/ z& f/ [5 u) P  l! B: O原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462  y. l" S/ O% z8 u8 j) z. D, _9 y+ {

    % p4 o; y/ q- e1 [; E+ v
    $ u. k# i" o9 g. T: K. |
    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-7-31 17:58 , Processed in 0.430249 second(s), 51 queries .

    回顶部