QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2016|回复: 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 也不错) d. ?. p4 R$ R$ ?
    . n9 Y  p5 W5 f$ Z
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
    ; D7 u9 Z0 i* l6 z+ w* ~
    5 q8 T0 V* a! H' [- s, z下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
      f0 F- K$ C: |5 l3 t& ?6 U$ g
      H& D$ I8 I" F+ ]+ `/ f  V- _4 T7 _1. 确定目标,准备数据$ U4 A6 T' l* A- j  J+ r
    建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
    ( n. x2 M" f) F3 e2 s$ i1 m0 S& z# ^8 w0 M$ I
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:! O  O; A& V# f9 T7 ^& n8 c
    - p9 x. y" w( }( |( Y. Q
    首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
    + s  K4 U5 N% C/ S' Y6 r5 ~# J: i5 A2 P. u! k6 s
    除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。' I& E& b# G' t- F0 N  |8 D0 H
    : h+ h; x) n5 D$ N
    采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
    $ w! j$ b7 N# ]- h7 Q# U* K2 x2 t/ ^4 M
    准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。) P" s4 {+ j" X0 A  D; D' c
    4 h4 d; {  z: x6 x% \5 t2 n
    如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
    + l) s' N& I4 G( d) X5 B: K
    / C- T6 ]( l5 A% r% B* N2. 下载软件,配置建模外部库8 W& k' z6 p4 S% m; g' U3 L
    SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
    + l4 U0 U$ ^6 o1 r: l8 j& ]/ D' B; k
    " U, ?3 A+ C- k1 h6 n8 r(1)下载安装集算器(SPL)和易明建模软件; t8 L( _/ Q, n: f" l
    集算器下载:; w4 l5 ?  u5 M  r6 @. D) d
    “http://c.raqsoft.com.cn/article/1595816810031”
    & y( V6 ~6 d2 Y$ s4 a% H& l5 E
    & Q& K: K$ b  Z, k/ x易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
    4 [6 j0 i4 ^6 h  P9 f: g: b. S$ B% u
    安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
    4 G) m6 s, v9 x
    ! v) p# x6 _. Y% D
    $ l5 O1 K) u- g8 V2 D- C% r4 S6 K( S) p. k$ ~3 X3 K/ U3 u
    (2)在SPL中配置外部库
    6 q+ i# b) I; H(a)复制外部库所需要的文件- u5 J' h; L, g
    在易明建模的安装目录下找 YModelCil 和 lib 文件夹
    # G* n. {5 p4 R* [# z) T
    : r2 P$ ?" ~4 t; `+ O
    1 X: a1 H0 V2 G4 f/ j/ d6 a- t8 C% e) o
    然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
    1 V' g# f' m5 `. ~" ]9 a
    4 r3 k* M" u5 X& m& k+ E' ?建模外部库所需的文件有:
    8 ]% C2 K. }+ T8 F+ [1 G& o* B: S( X. @1 r& l6 K, r4 y: ~
    1>易明建模目录的YModelCil中含有以下jar和xml
    8 C) c* I, P0 J/ E) m9 m/ D  O! z. K0 @7 ^
    ant-1.8.2.jar0 {" y# m0 {/ z, c
    commons-beanutils.jar
    6 z2 _2 W) P9 p/ n. [commons-lang-2.6.jar2 l% n( v4 E7 s# I& I
    ezmorph-1.0.2.jar3 z( t+ I4 _: [
    json-lib-1.1-jdk13.jar
    ! [! L8 ~5 c! d2 j! ?: Iraq-ymodel-cli-2.10.jar& s" x& |9 J# `/ j9 o1 x: ~. _4 M
    userconfig.xml/ n& U: Q  V% N, g8 y

    * V& W1 ~- Z& Q) t8 O$ [" h2>易明建模的lib中含有以下jar
    2 K: R5 {  Y4 G1 |7 q6 B
    - ~; c2 I8 E( g; X- Acommons-io-2.4.jar" w' @- Y7 A1 y# ^5 A1 z* V+ E
    esproc-ext-20211104.jar
    1 v8 D7 Q+ O6 F8 m, x) j6 \fastjson-1.2.58.jar
    & C' @+ R1 H  O. v5 ygson-2.8.0.jar
    ) t3 K" U5 m; N- S" V8 e% r2 ojackson-annotations-2.9.6.jar- i5 g" h8 L; q7 Y3 s
    jackson-core-2.9.6.jar) Z9 a5 M+ B* u6 {7 z" ~$ G
    jackson-databind-2.9.6.jar; C- S2 k8 X1 D% `& K2 @
    jackson-databind-2.9.6-sources.jar
    . _: p+ j4 Y$ e3 O9 Q- ]jackson-dataformat-msgpack-0.8.14.jar
      n( |* b( `  c) X; B" Amining.jar
    7 S; `' c; K. ?msgpack-0.6.12.jar
    ; v9 ?% [& _; e+ \4 a  L2 ymsgpack-core-0.8.16.jar
    4 ~- B& t5 h/ M  ^" D+ U6 A) }1 f( J# D$ ^5 ]$ u. h" I
    (b)设置userconfig.xml文件参数( w4 p3 ~4 ]5 N% T6 m* n
    在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数# d4 P" N# {. }8 a% Q- |

    7 u9 ?& Z; w/ N! K名称        参数说明
    # T! Z" j+ ^4 Y7 `, wsAppHome        易明建模的安装目录& z  m; c6 P( c9 B& o! N4 V
    sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7! M7 ?: }4 w) X) Q. l
    iPythonServerPort        Python服务网络端口
    ; c  ~) H4 k1 W" ]% J7 z  xiPythonProcessNumber        Python进程数6 @! _3 Z5 [( c
    bAutoDecideImpute        是否智能补缺5 ]( O7 v; g2 {  G
    iResampleMultiple        重抽样次数
    / K4 z- t7 {& G1 v/ b) i0 [! P其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
    + ~* ^$ O. c3 R; q' [: Y, H
    7 w7 Z/ ]3 k+ z: v0 z5 ], O/ x<?xml version="1.0" encoding="UTF-8"?>& v2 N; o* o: r- X8 p
    <Config Version="1">
    $ b6 z+ o& {5 j8 [/ D! c0 L    <Options>8 K/ j( j# v6 C9 b
            <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
    1 k3 C5 F4 c/ A% T- S                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>  [: v! j3 \, \6 }
                    <Option Name="iPythonServerPort" Value="8510"/>' m) d* U+ k( S( ]. U' F1 @8 W! ]) ^
                    <Option Name="iPythonProcessNumber" Value="2"/>3 v9 j; }7 X7 v& B$ g0 h! M
                  <Option Name="bAutoDecideImpute" Value="true"/>/ H8 C+ e$ K4 b) ~
                    <Option Name="iResampleMultiple" Value="150"/>                                5 B. D& p  h3 J& ], X7 V
        </Options>7 |7 a# V+ d! t+ T
    </Config>
    + M* \: f. `  w+ @7 ~" N( U1
    % x" B) Z4 _+ N2
      x0 @, P" x4 w2 H3, a. r/ A* V* C1 x
    4
    - a- b7 [5 [* X" n+ S: I5; r3 ^0 U7 V! g
    6+ ]% u+ A9 o+ y4 M! O8 [
    7
    ; P; D" x' l4 M8
    , I  G" W, h2 I/ o4 M9
    + A9 f" Z1 A# [5 j0 Q0 N10
    1 E) Y) i% P8 B/ ^* E: @8 J2 q11
    4 L) x+ I& e" l3 R& ?7 W& U其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
      U9 V, B. n: `, Z
    % j$ ]6 D4 ]& d(c)SPL环境配置
    ) M" `' c  H) I" {* k  v& J( ^1>. 配置外部库
    * J. C* C, Z/ |+ d) h
    8 }- K7 @8 m% ]) G2 R打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。& b1 H6 O+ V5 g9 @2 O
    ) d( U/ w) }7 E6 w
    3 ]5 H! x0 g4 O7 Z* m9 s
    & D" J$ R3 n" g2 C
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
    & z) D* P1 _  m, o1 b& |3 ~6 A4 h# |& q5 W4 \; z
    <extLibsPath>外部库路径, S: `- ?# B% C- F4 j

    3 V0 M( x/ B$ E* W) x& H<importLibs>外部库名称(可多个)
    - |0 e, H( V- ]/ z
      V7 K4 y: ?1 [+ t2>. 线程数设置
    * p5 p0 i; S. s) U6 Q  R
    7 D4 P( Z1 p6 E; H如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。2 k/ Q8 _. E8 }; }8 m7 G5 `- i

    + `2 H0 l3 [  A+ E
    & L7 _  B4 O2 Q  q' a' k0 ?
    7 P% H# [. E9 _# q' o  j. Y在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。, b, a1 [. Z3 C
    . a% Z( x2 ?+ z5 X, f( }5 C
    <parallelNum>最大并行数7 i3 L  W  M* K3 v4 A& c# j  R' G, \

    - D2 ~' c4 I! c2 e3 f+ f& w到此,环境配置完成。
    * Q0 o1 a& B8 w. p$ N. v0 c5 h
    % O: S# J8 r: o( L: \6 z# q3. 建模和预测
    $ R& ?  {7 h, v2 u4 j(1)加载数据" K0 U: G/ V/ F: K6 _
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。$ `2 A' t! H2 y+ G+ C% ?) n

    0 i- z; k6 b7 t: g: S设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。1 m: H5 v6 ]) u8 w0 z

    $ W* [) v7 {0 D0 u( h$ a$ l9 j( ^
    $ V4 Z! d5 ^& s7 `* {* V9 M
    文件命名为bank-full.csv;: l9 Y# d7 s  S1 y4 d

    + z. H! l$ l( l) g  p; ?" VA
    * ~4 W# u( e% `3 T. R4 O1        =file("bank-full.csv").import@tc()) [- `6 t5 g9 T/ @4 m* i
    2        =ym_env()+ B8 ?+ \9 M/ F, u
    3        =ym_model(A2,A1)* o, X& C2 s. ^; A# O4 D
    A1 导入建模数据,读成序表" D- Q' ?( s, {

    1 B3 S+ h- v% @, W, g  P0 [! c% h# N
    ! n; X& r. j. ^! r$ B) {/ z
    A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
    0 B2 b: z! _9 T
    7 t/ q1 N1 P) P$ m8 b9 H; M" HA3 加载建模文件,生成md对象- T5 d2 J8 l" r$ }

    & a# r  J# J0 ](2)目标变量设置和变量统计
    $ k1 u* v: G! s& Y2 D* \0 s数据加载进来后要设置目标变量
    ' o. T# D; ^' k7 G0 s" l
    4 d: F* y# I" kA$ y6 [9 }1 _; N% c
    …        …! a$ x' Y6 P3 u' o: M2 }
    4        =ym_target(A3,"y")- V; L+ {5 B' ~1 O) t% q. t
    5        =ym_statistics(A3,"age")
    # f) t4 I+ g8 c1 }8 s: l9 v6        =A1.fname().(ym_statistics(A3,~))8 E% x! T( T6 J0 z6 F/ a
    A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。/ F, C6 s3 d3 _- f
    2 D! w4 g: y& b; H3 Q; g( S" M
    A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。  ]# I: r0 k, H/ b

    - X. c0 g! G( h) N. m; l2 R. F- `1 Z
    " w3 E  M! y" L
    & g" C0 q- f1 f  u5 S; yA6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
    # H' I( V. g0 s( G7 H* b3 P, f' ]/ M1 H

    ( b4 Q. c3 W/ z" y  _7 d% m) d9 I0 F2 i# ]% U
    (3)建立模型和模型表现
    ; g$ o+ a" o4 d( T6 oA
    , _* d) Y4 p; N4 R3 C& I…        …
    . p; W/ b( S+ Q- J% E# g7        =ym_build_model(A3)
    ' C) s$ C. J+ G* R8        =ym_present(A7)
    * c; r7 ?, @) R& {* h" V2 E+ N9        =ym_performance(A7)  u0 o* `+ u+ g; b7 n
    10        =ym_importance(A7).sort@z(Importance)2 f/ b) n% P! N, @' u* y' i% T
    A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。, f% T; b& {0 \! X) J; @

    2 Y/ C& Z& D" {" \. I5 m& h# q模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。. P% l! ?& h% V: q* g
    9 i$ {7 E9 a" f
    A8 返回模型AUC值及参数. p" I) p3 c9 u/ s

    / Y( ^* i! {/ X# u1 U. H7 Q: l# ?0 j8 l7 z' z; n' P% Y9 H; g9 Z

    , M* @- v& r1 ]A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……! {1 f- @: ~2 L. `, a7 p

    3 ]) b! r6 Y: v+ Z' b; e
    1 T: ^7 `: Q, {. L+ ?; {; [  w# Z$ ?' l# x
    比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线; w7 H% m. ]3 g- R" A

    / o5 B* C4 K- F" B5 S! e% @# [5 w0 v# T' S" R
    4 s+ k& @& B6 [* m
    A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。& y: c* X7 T5 {! U6 y, X
    . J/ D8 X) b" V( D5 R5 k

    : C' p' Y) X9 f
    . @% A9 b) \- A* U1 ~(4)保存模型5 l. ?, O8 u# |# v
    A
    % v3 K0 ?/ v) q( J% o) O…        …! M. {4 \3 C7 X" `3 v, v
    11        =ym_save_pcf(A7,"bankfull.pcf")! Z' X' M: d+ q& _1 b
    12        =ym_json(A7)3 h6 ]/ h1 Q2 k. B+ T+ g) i3 i
    13        >ym_close(A2)5 M2 ]+ ^( E7 N1 k+ _9 v, w+ D! ^
    A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。" Z& j% d! |" p! E5 g+ o4 r
    4 ~, E$ I- q' }3 u
    A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》+ c* `6 r! j1 g) S* v

    & r3 R3 W& @. [% x! qA13 关闭环境,释放资源。; S( X# M. c7 L1 Z; I6 S

    " Q9 K0 U* y, s$ A(5)预测
    7 k9 X( q1 D3 w3 r9 G0 G预测之前需要有pcf模型文件和预测数据集8 A7 ^3 R, L& N- @9 N% U
    % L, p4 @" c6 u0 E" ]) X3 |: u
    A
    & R8 U) T5 K& E& j' W4 _. I- N* \6 Y* Y1        =ym_env(); p4 a6 C8 O1 z. d! O
    2        =ym_load_pcf("bankfull.pcf")
    1 B9 [* T! w% m3        =file("bank-full2.csv").import@tc()
    ' ~4 M) f8 Z2 X% f% y! J4 T4        =ym_predict(A2,A3)
    : v" }7 V. _5 Q: p  s! X" _) v5        =ym_result(A3)
    ( x4 E3 }% W0 s6        =file("bank-full_result.csv").export@tc(A4)
    4 K9 h: t. O# e* j( H* L" x: \" J7        >ym_close(A1)
      O' d. }- h5 ~# XA1 初始化环境
    : t4 ^/ y' ?1 x8 l
    9 I# m6 F+ Z# l' BA2 导入pcf模型文件,生成pd模型对象。
    1 ?7 _% F4 T+ y" Z$ A) T! X" l4 Y* r) H# E* e# Y) T1 f
    A3 导入预测数据集,读成序表
    , M: `% J0 F) w' P- i* `) ?) A$ ?9 \8 U; o/ X$ ~
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)" G  h8 d9 r7 R8 O
    . l! ]' S3 _( d  ^
    A5 获取预测结果
    3 i- ?3 |% Z9 \  s2 }' T! v
    ) I" d" z" M/ R% W/ v! ~A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。1 t$ z- b0 d, J8 l4 K
    * M: y+ P# w" K1 J
    ) Z6 u; `" @# q! Y3 L/ Q
    A7 关闭环境,释放资源
    ' }) S- Y  e. H1 F# q3 D% y! w) q3 _0 y* X- d* Z, r6 G, p% ~
    4. 集成调用
    ' _5 Y2 |0 B4 M. t0 J8 @# `2 bSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465608 R# ]5 E3 d  S" M8 q. B

    - m/ g& Q" G! n. J9 ?0 A0 o总结
    3 p7 Q  u8 u, }: ]  K% t, i使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。, N5 s' t  O) U3 }. h7 g1 `

    ' O% k2 U; `. `  I3 DSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。7 I8 q$ \/ r1 G% ?3 Y* `" A
    ————————————————2 }. K+ z' M" p: k; y8 k& [
    版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 T. z) d" w/ G+ U, ~/ ?
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462* Q% P/ c9 j0 N5 k. P: g2 |
    + t! j( J7 K$ j/ y

    % Z9 e# p5 v; R* Q6 `8 `8 m
    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-5-30 17:53 , Processed in 0.406422 second(s), 52 queries .

    回顶部