QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2015|回复: 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 也不错
    2 X% s1 v5 x: S. m* P' h
    6 S8 Y1 j7 g8 v2 c可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。! c- F5 c2 }2 s; R

    * `# v3 P+ s3 A  L9 Q6 V+ I下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
    % b! p0 H0 t$ b9 a* M$ H* a0 W. e" _, o5 p
    1. 确定目标,准备数据; F4 O* h7 P* J: j' ?
    建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
    . ?3 g! X6 u+ a/ X# O+ O2 ?# O4 B  S/ P; _
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:3 V& U  a1 p+ H- ]3 k5 m2 J

    9 I( ], b- F4 w9 Y" x2 h3 [首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。
    6 o6 u+ }/ Q$ U# d8 [5 C
    ) v7 k4 C, Q0 I" P% y除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
    * E( _0 h8 o: s  R6 n
    8 T+ j: Y" I+ V) G- ]8 m采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
      _% o/ ^! N  A, ~# j) A1 w5 C$ P, E
    准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。$ {+ A  F8 |8 s% |: O" u
    5 d7 p' N. T1 u" W" s0 O
    如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。' O: n$ C4 z& w) l/ @! ^

    / ^2 A9 U5 T9 Y2. 下载软件,配置建模外部库6 J$ P5 k5 r% k# u  U" [' G
    SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。' Y$ S0 G: f8 @/ g: W+ y% K

    ! g7 K7 x; C% |(1)下载安装集算器(SPL)和易明建模软件
    1 m5 v, `( z% s! w3 x集算器下载:9 |3 S6 g. e# _; E  y# `
    “http://c.raqsoft.com.cn/article/1595816810031”+ N. l; B5 ?; \# x5 V5 U0 Y# l9 z
    ( v+ s2 U* \# }1 u) g* e! B
    易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”& Z" B; B' l! ?$ R2 [. [7 G
    + t) C$ F0 i( Q# T2 m
    安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel
    6 }! o0 W1 Q) b% H( h4 Y5 W- E- S5 i3 ]$ y8 E: V: M

    & }3 O8 K; `, \/ |/ p. c; ]
    7 C7 [" D- m1 d0 p! s! a(2)在SPL中配置外部库
    " i7 H; ^7 k  P, _+ `(a)复制外部库所需要的文件
    ; B! I- _( o( ^( r: K* \在易明建模的安装目录下找 YModelCil 和 lib 文件夹8 p6 }+ {$ ?- b! R) O% y

    # r+ ^# g! h# X9 Z9 [
    ( q' `4 p0 i/ ^% `& n% A4 r
    . M& x9 w" Q+ X0 L  D+ O然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。% G( q5 I7 t( V5 m- g% q
    # ^) D# |1 g; @6 X& Z. B
    建模外部库所需的文件有:/ n$ C: ~, H9 m, u. d7 Z9 l% Q
    ! Y% ]0 }/ f% w5 |% Q- K7 }
    1>易明建模目录的YModelCil中含有以下jar和xml' E! m2 Y& C) _7 b
    " Z1 d+ B# E& g' K" }
    ant-1.8.2.jar
    6 |9 m3 x" @% E: zcommons-beanutils.jar
    # L5 _9 Y. e3 @* ?  ^4 R; Ncommons-lang-2.6.jar; _! ?" P, v. [$ j
    ezmorph-1.0.2.jar
    , |" L. [/ H5 Q. |* Yjson-lib-1.1-jdk13.jar, ^1 D' Y2 B( k, m
    raq-ymodel-cli-2.10.jar6 V2 w! l/ i: s6 k; x2 n/ E; e
    userconfig.xml
    2 U' D7 i# X( I/ r( X- ]
    + C) I) z+ ?' u  z5 f# \" S2>易明建模的lib中含有以下jar, u. G, S+ q7 j" |2 b
    ( \$ W/ E7 z9 `0 m
    commons-io-2.4.jar
    / o1 D: Q) G; _# o; nesproc-ext-20211104.jar1 z& D! M/ m+ e* j
    fastjson-1.2.58.jar/ Y- T/ x9 O% G5 s+ b  C
    gson-2.8.0.jar
    6 V% L$ S" E7 h) ejackson-annotations-2.9.6.jar$ N3 G& B0 |' K1 h' }; _
    jackson-core-2.9.6.jar
    * Z4 F0 ?' r7 }; u6 [& r. a# Jjackson-databind-2.9.6.jar
    & ~5 f6 O2 D7 Z1 t" Njackson-databind-2.9.6-sources.jar$ ]$ ?+ d( k+ v  P/ ]' t
    jackson-dataformat-msgpack-0.8.14.jar  j9 L7 r& O! ?' S6 [# X
    mining.jar
    : s/ V( N/ F; `& _3 t2 t8 ]6 l# zmsgpack-0.6.12.jar9 V3 |3 _$ _% Y! G' P3 J
    msgpack-core-0.8.16.jar
    ( F! X) U8 N7 `8 b" N
    6 v. k5 U* o  u2 w; E% W(b)设置userconfig.xml文件参数$ O' o: d: s' L1 Y* l" H
    在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
    ' Z5 j7 p6 W% |. L# n4 S( I  Q1 G7 o2 O2 }7 W" \7 l5 z
    名称        参数说明
    + r9 h/ V2 Q( q1 h" D, J6 T6 }# hsAppHome        易明建模的安装目录
    ( Q" H: H# V) u" c1 DsPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7* ?+ c, t6 ~0 Q  W5 y# p
    iPythonServerPort        Python服务网络端口: J& a; }. a- Y; o" i9 x2 _
    iPythonProcessNumber        Python进程数$ V8 R' H* P* B* E
    bAutoDecideImpute        是否智能补缺" H3 y9 i/ x3 g$ @5 ]
    iResampleMultiple        重抽样次数
    * `" J; _" S! `; `3 o8 y2 g其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。& a9 }. Z% a) D
    - r  l9 E9 b0 ?& |9 ^, @
    <?xml version="1.0" encoding="UTF-8"?>) c/ ]+ `" T5 a' Y5 H2 Z
    <Config Version="1">( _- E9 K& z) O2 L
        <Options>
    7 o" }. A0 ]0 A9 ^. B6 d( a! @* Q        <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>
    / C2 L! S+ ]) ]" ^* x* ~2 f                <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
      [1 i, R- u* z1 r6 t                <Option Name="iPythonServerPort" Value="8510"/>
    * E) D: Y% H. c                <Option Name="iPythonProcessNumber" Value="2"/>/ y5 c3 Y: S, q
                  <Option Name="bAutoDecideImpute" Value="true"/>
    : b" h. l. n9 c2 l; v                <Option Name="iResampleMultiple" Value="150"/>                                7 v" ]+ t7 v/ }& s% y0 V
        </Options>
    7 @2 y4 q/ d! p+ _* i0 ~</Config>
    ! p4 F- z9 O+ @3 [! z$ g) M1: F* r; r1 \" |( W& B/ t
    2' A! ~2 W/ [6 `' f6 K
    3
    ; P7 T2 v1 S; k/ _3 A, ~- @1 b1 ^4
    9 {" y3 s& X$ F& h' w5 C2 [  O5
    ! d- a* F: b% I' O1 Y  H( d% g6
    + G6 Q$ i  \. A( ]76 j2 ?8 l- L* Z+ q& h
    8- V$ z6 W0 F& Z% P, H
    9
    ) ?; j/ h& Z1 J% }6 x10
    8 F! p& ]2 h  L- n1 y11$ H4 K7 o- d8 C5 [2 C2 y
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。, N$ o- {: C1 y! C6 W" e

    ; c& h% [1 @. j3 x; B6 r(c)SPL环境配置4 W3 z4 g' j1 ^9 L
    1>. 配置外部库: I2 [6 t5 p1 P, l5 X6 A
    $ G3 x8 t6 ~$ J, _+ G" C
    打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。
    ( }6 k1 i5 T: X: P
    * q# a5 L% ~6 R- x# j* l$ d2 u
    , O1 p  Y: t+ Q9 t* n
    3 s  G1 @/ u/ S) y! T8 z在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。0 Q2 D, n: }6 Y1 R! k/ d; m: ?

    " a4 x  x3 O/ ~' m. \( G2 T<extLibsPath>外部库路径
    : i9 t# M# ?& d+ ]1 V3 R5 b
      J$ j: H" R7 r: C8 u<importLibs>外部库名称(可多个)
    3 @' Z! r' y9 N; K4 v% \, e% h2 I3 A# v+ m( _4 y
    2>. 线程数设置- O9 t& q! C1 {" s

    , O2 U3 j! m! @$ F4 d8 b" H# o2 f% c- u如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。
    6 T0 L" X5 N% X: a2 P$ i7 u3 S
    . H( {$ S# Z! W3 r
    ( K& _; |' |# @8 h; D: Y. A; N/ p4 k! @7 l# c- v8 @$ x
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
    7 s' |9 S, k6 W8 f& w* f6 |7 i& u! u1 d/ y9 Q
    <parallelNum>最大并行数9 A  B' `# F' o& d! b( w; d% f

    9 E( d# `) _  y  W  C到此,环境配置完成。! U$ F' c$ t' u7 v2 ?
    * ?! L2 D2 b8 Q4 m$ T
    3. 建模和预测
    3 ~2 U$ n9 b/ @4 n3 q/ {6 @(1)加载数据/ @6 H5 s2 G0 T8 \! i* ]3 f
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。
    5 ?2 z; l  o4 ]! Z3 N. X  L$ z
    ; r8 L" p+ y/ }6 a设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
    $ [, B/ N& H4 V& u
    / W5 @" U3 w' V' L5 M- a, D; y; ^! M( ], b1 H; U: Z

    $ b" Q1 r4 q9 O+ g7 S+ e) E, k4 Q文件命名为bank-full.csv;
    2 L0 f! N/ D9 k- ~0 D0 Q( W: K! j# ^6 ]* p; q- U7 W6 C, k
    A4 X& {: _& t+ N0 n
    1        =file("bank-full.csv").import@tc()5 [  k% X) H7 G. Y8 }. a  o/ G
    2        =ym_env()
    ! Y6 o" |$ E, Q+ b3 B) p  B$ W3        =ym_model(A2,A1)
    ) I$ e% X4 W4 D/ [: Q: T* BA1 导入建模数据,读成序表
    . D' P5 ?2 N, I6 w$ `  A# B, @  q/ T+ b' d

    2 ~0 j( y* I" e0 d% S
    1 U' D# r. O$ l3 G& v: ZA2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
    0 o9 W% \9 A' L; Y
    5 o8 |) M3 a3 U9 k4 \A3 加载建模文件,生成md对象; s" ^$ k; @4 t  i
    - O3 j: Z# E- ~/ _
    (2)目标变量设置和变量统计
      a$ z4 U# T+ n& u0 q6 b# Z* q数据加载进来后要设置目标变量
    ; o  G# _5 v5 g2 K8 P" F4 t
    5 X3 H  W( m8 d& X+ Y, a2 w& J3 LA8 \4 D, ?; ?8 L/ q+ G
    …        …8 j% u2 z, w: |3 G
    4        =ym_target(A3,"y")
    6 ]" n/ a9 Q* d5        =ym_statistics(A3,"age")
    . y! f6 Q- r- M, h' j: s- O9 v6        =A1.fname().(ym_statistics(A3,~))
    3 i! g. p7 M* A$ j( cA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。: y9 v, K8 `, o4 J/ U2 V: z

    6 d5 O/ h3 U& a7 T: u8 LA5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。
      M: a) |. D5 H+ c, H
    ( Y0 V. K+ K- o8 {8 D/ x- A  t) C" _3 u, N
    % {% Q! \! x$ R8 ]$ {
    A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。# g. d, d, e  c* Z0 u' _# D

    0 ?! I- ~- Z' k: |! v* Y2 n. l* T+ m# p- y

    ; a) e7 T& }4 c2 m, C(3)建立模型和模型表现$ j% Z3 @( s1 w5 e6 _) T) R. }
    A$ u9 x; c6 ?1 q+ d
    …        …
    - d4 P) M/ u6 V& S# _( ~7        =ym_build_model(A3)  O' N# Z- O/ t0 W1 f5 i- a
    8        =ym_present(A7)8 Z. H. _) Y3 ?2 Q
    9        =ym_performance(A7), D4 v, A+ m1 e: X3 ?5 f
    10        =ym_importance(A7).sort@z(Importance)
    9 Y$ M0 J  r! q7 w: ^& ~A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
    - C/ O( V* o! ~. Y1 [( @" y1 C5 _; v/ t" M5 a  @0 [' ~
    模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
    6 x0 n  o5 z$ d* D! I9 S5 p% n& b& M1 _7 Q
    A8 返回模型AUC值及参数
    1 I7 U, x, x5 ]- K2 v4 x0 v2 c8 M( O. G6 {
    - Q2 M8 a# [) t3 P9 j
    9 b  ]+ E2 i- K) S% W* _+ {
    A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……, X& V0 i8 E( t  A& ~8 T
    " x: m* H1 g6 G* x, n/ j7 V

    . P$ O4 W8 g$ \8 |& e
    # t, D- `, c) _2 X比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    : D( q% K1 g8 v+ H8 t4 E: o& U: ?
    5 f- x' N$ J) C; t# H9 ?
    1 f* z5 X$ H: i8 V8 c
    A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。
    - K8 f9 N. ^% n* O& ^
    ( n. @' C1 I1 [4 R3 S. F3 ~$ O6 w% R1 H' t6 H6 c
    ' ~+ A" T$ C/ I5 `5 G/ V0 A0 s$ u
    (4)保存模型& y# N$ X& \8 O% t* J
    A4 U% E! E7 T' `% _% h) S  g
    …        …8 _- _8 B( f! Q& \
    11        =ym_save_pcf(A7,"bankfull.pcf")
    " y: b" R3 [; n12        =ym_json(A7)) C" c3 a, V: `% F0 N) ^3 R
    13        >ym_close(A2)6 c$ b$ _( |$ j9 B5 m
    A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。: l9 T% T. H  m- W9 L/ a; `% h

    2 m& ^2 O( h. WA12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》3 ]. P8 f9 o: n) I% v

    % A4 W5 b, U, @- _( {( y" {A13 关闭环境,释放资源。) u- l9 w) D! C
    ) i+ W' F) W, C0 u0 Q# J
    (5)预测
    % t8 @- Q1 S6 S7 S: |8 d预测之前需要有pcf模型文件和预测数据集
    8 G0 G7 Q4 v4 m' A& F0 a# o, {! B3 o
    A- w, E1 X( s2 k% m0 H5 l, n# s6 d
    1        =ym_env(), s* }% Y' K7 w6 m5 E& Y
    2        =ym_load_pcf("bankfull.pcf")5 V/ F7 k' [# @: g$ T, D4 I6 @& [
    3        =file("bank-full2.csv").import@tc()# e! t: s  v3 u2 o% s
    4        =ym_predict(A2,A3)
    3 }& f* X. h4 u9 D3 c; X5 n5        =ym_result(A3). w1 _% Q3 ]7 o  H) S+ @6 M5 T
    6        =file("bank-full_result.csv").export@tc(A4)6 Z  Z- o2 A6 _. G. d7 n
    7        >ym_close(A1)
    $ @, L, f+ X  hA1 初始化环境
    / Q; ~% v7 Q0 [0 d# z4 `5 @5 a8 j, X% Z, X" n
    A2 导入pcf模型文件,生成pd模型对象。
    # U! M: W& u. p  o8 c- c5 f; U
    A3 导入预测数据集,读成序表
    2 V  [& l! y1 v3 p
    " V% n& [/ f8 R+ [0 RA4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)0 U- ~4 B7 F2 {+ E# ^( m4 R

    . o6 i% a$ l1 S5 V/ DA5 获取预测结果% _: S4 m' F2 \3 Q4 H& Z' K) A/ T

    0 d0 ~! ~2 M* y- V# P5 Y( fA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
    6 p& Y2 a0 Z9 K* c# h
    $ k! C( ^$ E! V2 q) ]0 A# j" L
    ; w- V  U) t5 z; tA7 关闭环境,释放资源
    2 p( q  S+ K% a3 m  p4 m% t& B$ |  U0 e: D3 K4 S; y- a; q
    4. 集成调用
    ( I$ I/ Y5 g: ?+ r- N# ^: uSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
    2 A4 w. N8 V% p) w4 a; W# y0 c7 p& Y$ l$ |  U, P* L8 E9 w
    总结2 p- j1 S8 g" U% g
    使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。
    / K/ }( ?" ]2 L' T
    , u' b& }) F! i+ eSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
    ! [# s+ p2 h5 I% g, |————————————————% a' Q% n  b1 V
    版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% d4 s( @# k4 o
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462
    2 B$ |7 G) R2 k9 A8 z/ O* \( u7 Y8 F+ p8 f; d9 x; m5 y

    1 m# j$ d  ]$ M: t3 ^* d: A
    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 13:37 , Processed in 0.461988 second(s), 51 queries .

    回顶部