QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2014|回复: 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 也不错
    : K; ]' B: Q. t, f3 ~+ p- J" S# k  ~9 e! o9 F" M# S# A8 r- @
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
    0 u/ d* A  O, b5 l7 l" q* V# f* r, w' e
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
    3 C" c. [  }9 ~. r! ^) y2 C6 S* |. U! T: H5 _0 `5 W; }
    1. 确定目标,准备数据" G6 M! c2 `6 j5 u
    建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。9 P7 u+ j5 U/ P, o" R- q
    ' o  P: D/ ]+ `+ Y, Q
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:) W# O9 J( u# i2 F  u

    . r5 m  @5 R( t/ U2 X4 ^5 i- X首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。% ]% U. R2 u% ]. j# U. }1 Z
    ; A. `# N$ P7 i( o, r* N8 S
    除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。% s. F1 v- W1 T# \( A; ?

    ! G% G( x& J/ X7 N7 C采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。- z$ s. h5 z2 n& |
    4 s% y& F4 K3 R1 q
    准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
    4 ~9 c+ ^# m: `; S  n- g. N4 {7 U0 H$ w
    如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
    0 J, j+ I+ Z( G
    : A. w- S" T5 J9 R8 U* d% n& y2. 下载软件,配置建模外部库
    9 H7 @7 |: r. V" e; {, lSPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
    2 n6 r2 T5 y2 `( s6 M# J$ t1 j) o5 ~" i9 L; x) X' l+ y
    (1)下载安装集算器(SPL)和易明建模软件) C, S' P4 G  D! W6 |
    集算器下载:3 L) K+ I6 Y, S5 v6 @" @3 H% J
    “http://c.raqsoft.com.cn/article/1595816810031”" J% f5 b$ }6 K

    , z* T. W9 B' D# a: Y9 j+ c" `: ^  y易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”2 A. w7 @3 h. z3 r* }

    6 h1 I" W/ }$ }. ]. j- }, w1 x. h安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel& y. x# _+ y6 o8 d' d$ n! W. M
    2 J% P- ]3 H% ?% f; N) m$ i

    & B! u3 K$ ^7 R* {: C6 E- q* l- ^2 u8 D1 W$ C/ p& z' j! |
    (2)在SPL中配置外部库$ h  B% r' ]& \% x7 r5 h5 H# Z
    (a)复制外部库所需要的文件0 b7 a9 T2 m0 ~$ x7 j$ s- @
    在易明建模的安装目录下找 YModelCil 和 lib 文件夹
    % w! A( O& o  ]: [7 @! z1 l6 M9 N( [3 z* s; s
    : r7 ^, y* A" W5 A& ]. ~. g

    ' @+ Y/ A( \5 s8 _: E( f然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。" m7 R) f$ d) }" a' |8 Z; {
    ! `  o' `) F/ @1 ?* X9 M
    建模外部库所需的文件有:" @8 K+ j* q: c. z
    7 `# W4 e+ y, w8 @
    1>易明建模目录的YModelCil中含有以下jar和xml
    3 p% H0 Y- N/ Z9 J& R# b# M+ J  k: f0 x$ Y
    ant-1.8.2.jar% q/ j6 U7 I  M' [& h- ]
    commons-beanutils.jar6 z( O+ z) e9 h( i
    commons-lang-2.6.jar+ h2 Q( d1 o' ]. J3 m0 \% d! T% A
    ezmorph-1.0.2.jar
    ! b( D3 S# f" b/ j* _' Ijson-lib-1.1-jdk13.jar, O* T: q+ i/ [! e+ _3 V
    raq-ymodel-cli-2.10.jar
    / F& z# ?$ O  W0 Xuserconfig.xml
    ( y% o0 F9 K' V6 T* {1 l) ?( _# e$ }6 z# c, P; R
    2>易明建模的lib中含有以下jar
    3 c% a9 m/ _) @/ {( E
    2 S+ d& H: f; u- K8 L6 h" n; r4 ^commons-io-2.4.jar& ~! _* u  F$ @, ?
    esproc-ext-20211104.jar! s% u5 Q4 T" D4 j+ @/ o+ j
    fastjson-1.2.58.jar. L' [8 n, G& }. d
    gson-2.8.0.jar- f) c4 Q4 Y5 n
    jackson-annotations-2.9.6.jar
    7 ^5 ~5 Z! ^) U& y$ K2 \jackson-core-2.9.6.jar
    ( b, C4 ?2 y" M  X( b9 i, ]3 z4 ]jackson-databind-2.9.6.jar& G" u7 T( ^! @9 O7 ^
    jackson-databind-2.9.6-sources.jar& }8 E! g) c  x( }/ T; y) C& ]# L
    jackson-dataformat-msgpack-0.8.14.jar% I7 m8 V9 X) u9 w
    mining.jar  @( C: q1 s& H% O0 u8 S% K
    msgpack-0.6.12.jar/ e9 {- G) N* M1 l
    msgpack-core-0.8.16.jar0 {* h- z) Q7 v; R

    + |  ]( i2 T+ T. Q, T4 }(b)设置userconfig.xml文件参数
    ! D7 u+ v2 ^, q% w  l0 k在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数8 D! x. c" o' q3 H- H* \
    ( V$ P; R9 ]+ g3 u  ~1 J
    名称        参数说明
    - ^1 C; N$ E1 }: b( o( M- JsAppHome        易明建模的安装目录3 z6 C3 n- Z- l5 z
    sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
    1 l0 [$ D7 h; g8 }3 r9 s1 [iPythonServerPort        Python服务网络端口
    1 I2 x& Z$ K; i0 IiPythonProcessNumber        Python进程数# C' T1 P( f8 I, V2 Y# ~
    bAutoDecideImpute        是否智能补缺  R5 k* F! ~) ^/ M0 n0 j3 S
    iResampleMultiple        重抽样次数( _1 h1 O# z+ n- t
    其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
    5 p) i0 [  b# ?2 W! T' K8 p7 o7 ^. A
    <?xml version="1.0" encoding="UTF-8"?>! z' c& a$ \( O  U, l" \9 |
    <Config Version="1">! C8 F# G" D! ^
        <Options>7 s5 A$ l# Y  n1 d
            <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/># o( k: _! Q" U
                    <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>0 d/ {" S8 O9 T
                    <Option Name="iPythonServerPort" Value="8510"/>
    4 T- P0 F" }. T- ~* N. v# r( X                <Option Name="iPythonProcessNumber" Value="2"/>
    . R* k" T. g5 u2 o' n$ W6 s+ k9 [              <Option Name="bAutoDecideImpute" Value="true"/>
      {( T& m- g& r) o- W. `! l; w                <Option Name="iResampleMultiple" Value="150"/>                               
    9 H5 _1 {  L% L% t4 I/ M+ k    </Options>
    # _# X3 {& s, {" q, }* U. b! h0 B</Config>+ Z' F. @/ ~$ w$ U% D
    1, C( @! }& l( k) Y& W5 t- |
    2
      V4 t' l# u9 k9 s4 z' y3
    2 n5 [+ o9 ^# B2 h, v4
    + S! r6 t9 P; h/ |& {& b50 N, _" K, M; F8 m; o% t5 k
    6
    5 r  E3 x' {$ [  v) i7
    ( Q5 @. s* N) {1 g: ]0 ~8
    0 P# w: g2 V+ t$ o% ?/ h. `9
    ! t- w# D6 o$ _& u: w; i' O10
    + Q0 D' h! o0 b8 L, t117 S( M8 d5 x$ h
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
    2 T+ h: A1 K3 e6 B! e* S  A" {7 J9 F
    7 Y5 N$ e$ @4 L+ y8 ]+ O" {(c)SPL环境配置' T  M* K1 N8 S. V
    1>. 配置外部库
    - G2 D+ Z& S% [9 e. k1 T" d% r6 J1 r5 \4 N& Q
    打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
    $ |7 c; a3 j% p% b/ I/ ]! B6 s0 v7 v: u9 h* W

    / q4 U5 g3 Z1 \1 M% ], L' ~% }
    2 g; b* N" Q. t- Q' B9 k4 C在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。5 z# W$ U3 Q+ h5 O

    ; x5 P: \8 @, u* ^- h+ g* k4 @<extLibsPath>外部库路径
    6 I9 Y+ o6 z% b5 g, i
    / Z: A! Q( |2 v7 j: b<importLibs>外部库名称(可多个)
    ' R1 F  ~. `$ m8 i$ T/ f. P
    * E# z4 T% e5 N" ~7 v5 A3 u2>. 线程数设置: m9 C" S7 P" c, H& j9 D- {

    4 p! w/ Y$ F! D1 L如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
    5 D6 @/ {0 i) Z# k5 ^! q6 S3 G
    0 D0 W& N3 }0 A( T( J! d( Z* q- z, ~4 {! X. ]4 M- Q

    * H8 K, C! [. i. Q9 N0 h在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
    : t2 p. z4 F, _; T4 J, c! M3 @& N1 \, z1 w+ b% F& [9 @0 L
    <parallelNum>最大并行数) E+ a* x. q( l" X
    " f; ^) ~5 `# m
    到此,环境配置完成。1 M7 u0 k2 o; @3 I/ h" S

    & M' j3 u: N0 x3. 建模和预测
    , p* z  D- O& [! l) A. o(1)加载数据! _! X5 R% l7 q1 I7 H7 A" S
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
    # O0 I, X- Y8 C  X5 s$ z
    : `5 M3 |  _+ c; R9 R" C设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。6 Q4 A7 M- ^/ X- X6 O
    7 q- l: q& O( q! j! g" f, t% l

      Q" }* E6 Z1 _- j
    4 \5 |+ M' m; ~7 Z0 G. L文件命名为bank-full.csv;0 E) @, z1 U( t. z2 {# ]' w' I

    4 C1 ]/ C3 E2 k5 [$ ~+ P) jA. z- E. [. T* g
    1        =file("bank-full.csv").import@tc()3 J2 g( c2 j9 c/ h! ]/ C! z
    2        =ym_env()* @& @) @3 D% i; K' g  p
    3        =ym_model(A2,A1): T; d+ A$ f8 V& s: i
    A1 导入建模数据,读成序表5 k6 [5 X! Z7 l+ J7 @
    5 X- f  X% O+ \) z" m
    2 w3 `+ Z) j4 U& P# T! y
    ( q: Y# S, d% V* F% \1 y! h
    A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。. d7 U% b- g' g$ H- |4 b' Q
    3 {/ l4 m- V# s) R0 C
    A3 加载建模文件,生成md对象+ z; S' ], u8 _# m7 a$ h9 I  ~

    5 X$ b! e8 _& w5 r6 Z4 N(2)目标变量设置和变量统计
    4 V- _  A/ C5 x* X数据加载进来后要设置目标变量
    : \% q, E1 f! z+ |( S) X! {6 r$ P  l
    # m. W" [" |! rA) ^4 k3 n/ r$ M+ D3 ^& B
    …        …
    9 s3 b, ?% o. s) c2 m* K4        =ym_target(A3,"y")) I" t9 ]8 ]( z0 Q. ?; u$ j4 e
    5        =ym_statistics(A3,"age")
    7 s+ E* R; Z; {# ~  X2 G& D6        =A1.fname().(ym_statistics(A3,~))
    % Y0 }; D# n- A6 {" c' y5 |. @A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
    9 h& c# H2 l4 t4 z+ f% k
    4 L* l: t0 B. ]A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
    : s1 A% d% q% ~, C( e5 z
    / U) C3 U# @% F7 X* z- f1 [+ f4 u4 F9 m9 Y8 G

    ; ]/ M/ k# g" eA6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
    8 O+ W. C+ a5 l# G# O3 ~3 U: O, ?/ q5 R
    " l8 y0 ^) T5 B1 h

      k) b' @& Z. j3 U7 K(3)建立模型和模型表现
    & f3 i) A6 `/ z. j* T. xA
    7 o: R& F* D& U+ Q…        …1 o. I, y) ~1 F7 U; m
    7        =ym_build_model(A3)
    " j# R; X* d: H$ w1 L! Y* W# }8        =ym_present(A7)0 V8 U+ w2 i; q# z# H1 |
    9        =ym_performance(A7)$ M* C* ?! f! k* a/ D& _
    10        =ym_importance(A7).sort@z(Importance)* r2 _6 v1 Y! x' w9 K
    A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
    8 ^1 H* z: H' M% E( l0 S1 E
    ' C, Y; n! Z5 e* P9 y- D. @模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。  H1 @- Z6 V5 }: V, O

    $ `! y, T, P* l0 zA8 返回模型AUC值及参数
    * ]8 g  Q! y) h& h% Z5 R7 N  A/ Q- }5 M( u
    + ~; H& r% p% b4 O

    ' N* ~' ]$ P* l: e' aA9 返回多种模型指标和图形,诸如AUC,ROC, Lift……0 y" B5 V7 l' @2 e+ i/ f8 o
    ' e* b6 E4 J! w; z2 h/ W9 t5 B

    . m, ~3 C3 ^" g: c" s
    6 {" z0 D- p$ V9 h比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    + [, h4 r4 S8 J* v9 J2 k) I: n9 p$ N8 f1 P6 X

      d0 r# U- m  C: u5 j& D0 u* m, {  W
    A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
    ! }/ t! L: `8 E5 P2 X  G$ N
    + v6 ]+ o) m$ Q9 D4 n) `8 S8 Z; v% x6 e
    2 o1 z* y, c9 B7 _( T5 O
    (4)保存模型
    , X# ~" R& y. Z# ^A. M. _' X! W' |  ?9 d* M
    …        …
    ! t! f' n  s3 D0 [7 A* ], {11        =ym_save_pcf(A7,"bankfull.pcf")8 r$ _* T- @( ~6 J3 }1 C0 c
    12        =ym_json(A7)
    4 q# R. l0 b( [5 [( `+ g13        >ym_close(A2)
    + z2 U8 q9 C% A$ R3 |! E; P1 bA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。3 z+ E8 i' ]9 J* h

    * `3 l8 m! X% V- L4 |" SA12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》% B1 M$ B: H' Q7 e7 K; J
    % _# @, J# g4 M8 x9 f
    A13 关闭环境,释放资源。
    ! i& h/ C. p; h( F0 Y$ Y0 W. Z% r2 ?5 W- z- ?8 h9 Q
    (5)预测
    / ^$ h" h. S1 @( k2 L; h$ i& ~预测之前需要有pcf模型文件和预测数据集3 S) a5 |) v: o
    & `  f2 _* ~8 u
    A
    9 d0 n, h6 y( B5 H9 J1        =ym_env()2 X- I' E: b/ R* A
    2        =ym_load_pcf("bankfull.pcf")
    % P' C  W0 u! `# y5 _3        =file("bank-full2.csv").import@tc()
    ( Q0 t) r8 \$ U# X* j# i/ y+ D1 g4        =ym_predict(A2,A3)
    : [' b) m! u: a5        =ym_result(A3)
    " j5 ]$ i, c6 ^- {: l* W$ l) o6        =file("bank-full_result.csv").export@tc(A4)
    3 U$ a' E$ w. S; M7        >ym_close(A1)( G1 n& k3 e4 O" s1 D- _
    A1 初始化环境
    " b9 _# P; ~* R3 M9 }0 w' T# V& `  o! ?# r$ Z
    A2 导入pcf模型文件,生成pd模型对象。
    2 _  y' E, T: W. p
    % U4 P, ?2 B# J$ w" BA3 导入预测数据集,读成序表! }+ `0 N# }8 E! T/ Q* W( u9 F8 X
    4 i& K) c; i, E3 Z/ Q+ o
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
    * V" e4 F- i/ b; q9 N( W
    , R2 u7 l+ f# X& C7 _6 o& y1 WA5 获取预测结果
    / T% o+ b) F& ?" L
    $ Z! r6 `0 z/ i" n7 f$ OA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
    , G, y8 X6 V+ p& f4 o/ N" Y' e( e' ^5 C* R: D
    1 _3 x* g, v0 _/ Z" l# I7 B
    A7 关闭环境,释放资源+ Y: h, S; _0 y- u; m9 B+ m2 @
    $ n# _# ~5 g1 Z$ l: N7 c' N* e- W& S
    4. 集成调用! r- R1 t: g; B8 C- z1 [) T2 A/ S( i
    SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
    8 H4 E' P$ g, M2 T5 R  J
    & y3 N# F; S9 P6 B% z总结+ v9 n5 j6 H5 B8 e# Y
    使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。; C" b; g2 Q# \& ?3 G( M+ }* Y, {9 h, {

    $ {% |! D- D, S) s( mSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。" Q. z" ?4 N& P! R* F! H8 x
    ————————————————
    - X: [& q2 w* D* r) ?8 `) [# E& }版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; ?( o$ }+ l" ~0 ^5 ?
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462' Z) Z. g+ z( |) B7 R: t4 M
    & c: K/ j8 y# ^/ D

    9 X7 ?/ c$ d$ ~- f1 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-5-26 10:59 , Processed in 0.432895 second(s), 51 queries .

    回顶部