QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2078|回复: 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 也不错$ L) z. w2 g6 j, J
    3 S6 d- L& T0 P8 q# }0 _- x! _
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
    9 n- m, U( U+ D% z" F: s+ w9 E$ F7 U, g
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
    % y/ u, U% s7 g2 z, P( c. e  R4 I1 I+ C- _
    1. 确定目标,准备数据% \3 ?5 O" b4 F, T
    建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。$ S0 E; ~. ?: D$ h8 P- a& \& X
    4 u* j- t6 q- l3 [
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
    " I* T: _6 T# k' }5 y- g8 O* g6 W3 F" j$ a$ I
    首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。% [" j" \2 y! ?4 p0 K

    / ^& g1 ^2 @% {除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
    0 X0 G2 _: _8 D1 f2 z! {+ W1 ]' r
    9 D) X/ I% x$ Q3 G1 G采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
    ; g6 I! p$ U7 E$ v: F
    ' v  t2 N8 u. t7 K' i1 B5 ?准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。, p# N8 p! `1 a+ n1 d/ x9 f' J

    ( p1 S% q% |$ G1 p; {" R; t4 T如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。8 T& C# M5 N! @! o- @) @
    4 X; u3 u3 h6 A. m# I
    2. 下载软件,配置建模外部库
    " t+ r8 c9 U* }0 O1 U! P' S: @SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
    : b5 s2 H' H# K0 I
    1 a# n2 |$ u! D, m. Y(1)下载安装集算器(SPL)和易明建模软件
    , d7 ]* `# |# `5 ?  d* F1 B集算器下载:& o1 T) T( t2 _- Q+ h
    “http://c.raqsoft.com.cn/article/1595816810031”* E2 [. v! m: j
    4 g  R$ w+ _" |0 z5 K2 G
    易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”0 r4 W" R6 L0 ~$ v6 f8 H( d% a. ?
    ; g, K/ V7 c" a) b4 f8 U
    安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel8 q; F; y; _6 Q7 P
    ( s1 r3 T  z8 H' e/ Q3 r
      ^: ~# X! n- d1 L; `. v

    - x! p  \/ c- ^  a2 N5 R: M. G(2)在SPL中配置外部库
    ! j& L$ h/ y# Z' j(a)复制外部库所需要的文件
    : ^! H' ^5 C" k% l# [在易明建模的安装目录下找 YModelCil 和 lib 文件夹8 u) }: B8 r: U& h! P3 f

    $ H1 K, d; H3 y$ Y' Z* t+ F5 B2 @
    4 d5 H) ]; c6 X" m  Q
    : W2 [2 H4 L: i" k1 l: z6 x然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
    4 a# h0 y- l  i$ g( h+ R8 t$ l: o! @
    " a: `$ X, L( V3 l建模外部库所需的文件有:6 ?9 _2 a# x) y+ _

    " P: f% u4 i4 j3 x8 Q1>易明建模目录的YModelCil中含有以下jar和xml$ H1 N) V0 `/ {2 E

    2 ^+ X3 o" I. A# b: f9 S0 I  Nant-1.8.2.jar/ C% z! f7 V! \/ C( Q# z. a
    commons-beanutils.jar
    ' S( E2 o) `8 W% e0 G. K0 Xcommons-lang-2.6.jar) \5 z. D4 e+ d! ~* L
    ezmorph-1.0.2.jar
    ! T; T( |$ O) Y4 C( N# L" \- s' vjson-lib-1.1-jdk13.jar- a/ A+ u$ @) I2 R. r# C  b
    raq-ymodel-cli-2.10.jar' M  ~1 \' x1 ]& S2 q# t
    userconfig.xml
    , F( m1 s7 l: F! b; j: }2 K; X
    9 c: D* E' D, _- }2>易明建模的lib中含有以下jar0 m# ]9 ]4 f0 i( }, u% [" n/ U+ S9 `

    ! o1 `& B$ I, ?) {commons-io-2.4.jar
    / E" T# Q( K' W# D5 ]* lesproc-ext-20211104.jar$ g  f' a& M' W% D
    fastjson-1.2.58.jar/ R0 K$ ]7 F6 j, u6 ^: H
    gson-2.8.0.jar
    5 Y" i! v4 E3 O- p$ Y1 j. l' m, sjackson-annotations-2.9.6.jar; u( @( t8 c$ c7 w
    jackson-core-2.9.6.jar# C8 }5 P0 h( z( A; t7 y3 ^1 m
    jackson-databind-2.9.6.jar
    : D+ ~* G5 a2 C& j( l3 k. d' ^jackson-databind-2.9.6-sources.jar
    / R! ^: k: [# F$ S/ r! `% {jackson-dataformat-msgpack-0.8.14.jar- Z1 B8 g7 B( c& Y" o" X  A
    mining.jar
    9 J1 V$ U% T4 [! N5 k% Qmsgpack-0.6.12.jar( N1 o7 @" Y4 L
    msgpack-core-0.8.16.jar
    # ]: q4 H4 \8 X" |/ k; y6 s% Y4 Y: K. g4 L3 B4 |' B& y
    (b)设置userconfig.xml文件参数
    / [- N) N" g% V# D在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数9 k. c6 N2 w* K% A6 [5 [
    % T: ]. Q, ]. n/ Z
    名称        参数说明
    ! M$ v: S# s0 D" M5 U. N/ bsAppHome        易明建模的安装目录
    & ]( |% F3 _0 `8 w- }sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
    : N# F: z9 V7 h, I4 _" O  l1 OiPythonServerPort        Python服务网络端口. T; s  P) o- Q7 e" p4 W
    iPythonProcessNumber        Python进程数
    ) I+ [% D& J: pbAutoDecideImpute        是否智能补缺
    / y* f2 |: a' L) X2 i, qiResampleMultiple        重抽样次数) r9 q& C& O0 |4 ~8 N2 [
    其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。7 {& }3 o$ v5 _2 Z; y. K7 W
    6 D, u1 z: |8 Q& C
    <?xml version="1.0" encoding="UTF-8"?>
    1 N: ?& C9 F) S& C) {<Config Version="1">& }. K% x- H* |" m* c- i! ]( n& B
        <Options>) i. Z2 B) `% `9 q$ W
            <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>. k5 e3 x  D3 V4 `
                    <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
    / \, n; [7 c% |* t" b+ l3 y                <Option Name="iPythonServerPort" Value="8510"/>! E) N: h/ p* g4 f$ M* j8 z6 ?
                    <Option Name="iPythonProcessNumber" Value="2"/>
    ! Z/ I4 h; W. B; e# x9 u              <Option Name="bAutoDecideImpute" Value="true"/>
    ; M' h1 a$ l7 O9 a! a" j+ O, z0 t                <Option Name="iResampleMultiple" Value="150"/>                                / e( p; V5 f8 w* f7 Q2 }
        </Options>
    4 [8 C& x- W5 ^/ r- p: p</Config>
    ; [* o5 Q4 a6 n+ W1
    3 t/ i$ F1 ~5 U4 j2) Z9 A! G$ S* y7 W! a. `0 E% s
    3
    3 Z& L3 U& G, }" p" K: K2 S2 y4
    ( r% B5 \# v4 q. m! X+ u, G1 m5
    5 ~9 F& E1 }- k/ m0 Q$ P" U6
    % }5 W5 F- M7 Q9 M+ h78 L5 T2 m8 P( f0 j! W  f
    89 e2 f, a" v7 h- L& E, k
    9
    5 L. o- R* v' |" ]106 o- g. \4 {+ U& l3 y& Y; w
    11+ l7 K9 r5 t- n5 a" d
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。- i1 j- a8 @" K

    " t  F$ ]4 C7 Z, ?/ ^(c)SPL环境配置) \, @! ^5 D5 I, g# h! q. C
    1>. 配置外部库4 R: s9 {7 i4 d+ s. o& \
    # F. e+ g) T( m2 c: g/ [
    打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
    # Q2 G5 z1 m* b
      P$ ?6 [7 l; T2 p& @$ W$ u" D6 u4 }1 ]. f+ s$ r5 y- l# Q# a
    ' h. y0 |- m. Z: Z
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
    5 U6 Q5 O' J3 x
    / \- h7 M3 {4 p" ]* t& ~<extLibsPath>外部库路径2 F% E# Q2 a" T( U

    " R$ s* d2 k; V5 r<importLibs>外部库名称(可多个)
      h; g7 j" `/ p* p
    9 ]5 \* P- w" f: A2>. 线程数设置" Y% @; N+ [0 Z9 a5 L) Y" j

    # u' F: o0 `( y如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。' k2 O8 d6 v& \0 D  F; O1 @, v
    9 ?- u% B5 |( G2 u

    ) G$ K2 A: `- ^4 X5 x. e' c
    # }$ X/ \3 ^/ u# z& Q+ v% S' @在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。" z' \6 W  O. y9 m; @7 a+ \0 A5 W
    8 ~6 Z: j. n- {
    <parallelNum>最大并行数
    9 `) E0 j9 T. N; _1 t# D5 U" ~" k) S& T( ]
    到此,环境配置完成。
    6 ^$ _* j+ A/ Y# C) e# n3 D  K3 `$ L
    3. 建模和预测: s0 u7 E; s0 T& E6 e0 }) G0 l
    (1)加载数据3 P4 d7 C8 G  b$ t9 i
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
    & }5 U- K. L/ Q
    2 g! `- O; U7 r+ G设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
    3 J8 Q& a, c, O. B" ^  Q
    8 v0 X$ R- z. n5 c: F  U5 o1 p: ?# \3 [: D( p

    & l) e+ {; ]* u) w$ U文件命名为bank-full.csv;2 i. U0 L5 p+ ~2 I2 o* b

    * _/ T4 ^- W; `A7 E1 {* B3 S4 {$ T
    1        =file("bank-full.csv").import@tc(). [1 @) g4 X* f1 F1 y1 V* }  U5 u( V
    2        =ym_env()
    0 c7 t! D, _% }; Z7 ^% X3        =ym_model(A2,A1)+ r; C. m- |) I/ _: w2 i
    A1 导入建模数据,读成序表
    ) M: x: G/ M2 u. h/ {, I; Z! g: j. T8 a

    % E( C$ D8 E& n* r
    & n4 K! K/ w- ~! UA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。' W; S# v& i7 O6 [" y

    - V1 M& ~4 ^7 e# JA3 加载建模文件,生成md对象0 e* \* [+ _9 D5 d8 u- }7 m
    3 ?3 ~. {( |/ ~% K
    (2)目标变量设置和变量统计2 F8 I) o' z2 {8 \/ h6 ?& U
    数据加载进来后要设置目标变量4 \+ c$ y9 c3 Y2 T# m2 U! k6 R

    8 S( `2 @% Q$ Y" u; m1 HA2 `. C' `# E9 k" H( Q$ d, U( E# u
    …        …, ?8 R8 D6 Y, d3 `7 J, P) I- \+ r- K3 J3 A
    4        =ym_target(A3,"y")) H9 X# q1 X2 V. x) w
    5        =ym_statistics(A3,"age")
    ; W0 S# W- `" U' I) n6        =A1.fname().(ym_statistics(A3,~))+ N. z$ m2 c2 p$ |; G$ ?7 }
    A4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
    " d+ O5 @( p& u
    3 k/ T9 u: o8 _- ^$ I2 [A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
    ' b4 o$ u; r/ D( l' @* @& E. B6 \' C+ l9 c. {2 D& v- H
    1 o8 r. f2 I! \0 ^% j' w
    9 L& U# N. Q7 I6 {' p- C: J8 z
    A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
    3 X9 {" S% E9 h2 H( G4 E* m
    $ p3 ~  r6 ^  R+ p& I/ T: R. s
    1 Y, _, W5 P; Y" h  G$ N3 W7 _; y& G1 z& ?/ {# h2 ^% z
    (3)建立模型和模型表现
    ! ~( X9 V  w1 e3 B- A6 |* k& b" v" m, uA
    4 q' f# a5 Q* p4 {…        …1 V' O# h$ @8 Y. y$ G" N) L" P
    7        =ym_build_model(A3)$ w- y. r8 J7 s2 c, I! Q
    8        =ym_present(A7)1 K* c( f0 E% p1 `0 {2 L
    9        =ym_performance(A7)% p/ r$ \  Q3 m" B1 {# E
    10        =ym_importance(A7).sort@z(Importance)6 \8 g3 E2 Z7 j; B6 w) i
    A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。5 K  H2 Q( Q$ }: y
    8 }7 J/ i& b$ J8 D3 U
    模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
    " O4 m  X/ s& ]! l! H$ c1 G/ @5 r) z5 g' K! z3 Q( c
    A8 返回模型AUC值及参数
    7 @* W+ @( X! x6 P
    8 D4 r! ~3 U& Z* j1 \) ~$ X2 @- M5 [! G6 ]4 R6 l

    5 U- a, g. ^/ p8 s2 z! _A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
    * _/ ~+ y+ V6 b
    / Z( I- ]& G- s5 ^* W1 J
    % c8 b+ `9 E; `8 L; \% V1 _
    6 q! t" k, o/ l0 {$ p: h比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    * ?2 `& P& t5 Z; W: [
    ( Y9 q9 q2 [1 m" u+ m* {
    1 E0 Q: l/ `, i. S8 ~
    ; C# M: j- F& E  y( m, r" y) Z8 D6 K' uA10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
    # V; T" H! C8 P  l& {  V$ e9 u. M+ c+ G- \. ~5 s

    4 [! I% T  p0 J) V
    5 M, @) `/ u* E7 _  T" p, L  E(4)保存模型
    8 Y3 |4 F1 g' ~% h( L' Q/ c% ZA6 i7 G  H7 n, g
    …        …0 O9 P5 s% c0 a1 A3 G
    11        =ym_save_pcf(A7,"bankfull.pcf")1 {3 u3 b* Y" r8 q" u0 O
    12        =ym_json(A7)
    # I- e' g4 P7 R. v, P5 T13        >ym_close(A2)
    7 _8 R9 X4 t  A+ U1 FA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
    4 q; D" h; W) R$ x* n1 f+ j3 Q/ J( Z! f) v/ D+ w
    A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
    % r" H) A! C" t5 u5 F* E* o  t! _4 l) I6 O0 s
    A13 关闭环境,释放资源。4 q  d2 k& r9 `& g+ Z: Z6 P
    9 i( Y* W$ B' f$ i8 g
    (5)预测
    * {: e/ E$ p! D+ C; w0 ?/ {预测之前需要有pcf模型文件和预测数据集, e4 W" y6 W) ]) d3 |5 b* [+ F8 V
    & G. F! l' h- b; t4 T
    A
      o" }, A6 G4 o# z+ n' _8 v8 B- ^1        =ym_env()
    + Q; ~" Z; r5 S8 P- p  x/ _5 |2        =ym_load_pcf("bankfull.pcf")+ [. o( S8 k* \* \$ V1 F5 V
    3        =file("bank-full2.csv").import@tc()0 e; _) J3 R  P* o
    4        =ym_predict(A2,A3)
    2 B4 l. f6 c4 R5        =ym_result(A3)
    ; F0 E" n4 I# a+ C0 o- y0 a% p6        =file("bank-full_result.csv").export@tc(A4)# U. N1 s8 Z+ k) d7 N
    7        >ym_close(A1)
    / b$ x' [; e: A( T$ t1 xA1 初始化环境8 G9 l0 j  G) e5 t1 |; O

    ' A4 @* G* q( iA2 导入pcf模型文件,生成pd模型对象。$ s! H, n) Z8 h" m* U

    ( `' T1 H  `# }; CA3 导入预测数据集,读成序表+ E# h# G( ]. Y! T! }% r3 L
      e/ x- p" ?2 Q6 r
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
    + ]0 `" y5 _8 u$ R/ }( ~! g
    + p  \% P$ l& D4 T: s. t. |5 _A5 获取预测结果. y- T* T" u0 n% ~

    & \, p, @9 o' A1 bA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。( ^- |" x  r: z5 Y- d5 i. X4 M

    6 w3 F: y  e; A  Z* A, j( Z* ^+ q
    A7 关闭环境,释放资源, {% {9 ^- S8 U) q( `
    - E: f/ y2 |( J
    4. 集成调用7 B5 |# }  Z7 Y" k3 _
    SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465600 q4 R) H* k* [3 d& f1 w

    ! O' q% l/ x% j9 y) k, X总结
    # B$ L8 n, ^  l" p使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
    8 C4 X7 r  U2 _$ F; a
    ) L+ N1 w3 Q2 ?- x! \& c7 BSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
    . \, O& \4 ?: D, U! l" d% N, y————————————————
    2 _, v( |- O5 D9 Z& ?7 I版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 |3 _4 w, L0 {$ \
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
    * f9 m1 S+ h) {. N3 N8 W; |3 t2 x4 u! O! N6 B: C! G8 y: V
    9 g% J/ n1 s3 @" j; R! V1 J/ K  y) I
    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-8-1 04:24 , Processed in 0.424918 second(s), 51 queries .

    回顶部