QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2018|回复: 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 也不错
    : l4 P' U5 d6 [3 j8 T# L) m; Y% c* E# K
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
    " v( u2 C, w- w+ c& n' M$ ]4 k8 d% b% {9 R: ~) S: u
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。
    - Y) l3 W  U9 S3 l  b
    3 F& b' J  l2 z( Z- ?1. 确定目标,准备数据
    4 [' x0 j  O4 d4 D" B建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。% h9 S* |1 i$ Q, K
    & F8 @/ W6 b4 {7 l
    历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:& Z& x0 Z: d# W. I+ ~& e
    ) L& Y' }& B) f( E& K5 h! S! m
    首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。/ {. k7 z4 O& o. d' P1 A
    ; O7 m4 ?3 ?: s' _$ y
    除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。- \" p: I! O' K  w% k

    2 G8 ?6 l, E; I( u& |采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。
    7 K- j: o" J5 e* {9 K: \) w, D! Z* |% E, c" W5 I
    准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
      `* C2 l4 P% _6 e, B0 Q5 ^+ w% \' L- l" t2 U1 N4 V8 @8 Q
    如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。
    4 N7 S1 M/ J+ V# n6 I4 Z
    9 ?. k. J( R. k6 j2. 下载软件,配置建模外部库/ A3 E/ \' o1 q7 o$ P
    SPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
      _0 c  v7 k- N6 \* |& y6 g. l( @  X! }+ b: ^+ ~
    (1)下载安装集算器(SPL)和易明建模软件
    / U9 N4 @6 x5 C集算器下载:" e6 c9 i3 U3 m: S1 q
    “http://c.raqsoft.com.cn/article/1595816810031”
    5 M- \& p) B  k) P% g4 n1 y0 K; X* o# r5 C! y: s' l) H
    易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”
    7 D5 [5 C7 X2 m. k/ G
    ! M. J& l& s% m* D+ o+ [3 Q7 j2 T安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel9 L; V7 n* b' ^1 ~6 @

    2 D6 O& X' O( s% [: t3 q6 V9 s7 T2 B1 \
    8 P" d( s- W& C" Y- L! Q3 S4 Y
    (2)在SPL中配置外部库) V5 {* k9 ]- ^6 M+ w, L: H
    (a)复制外部库所需要的文件
    * Y/ p$ R2 T3 i7 m8 ^8 V: J在易明建模的安装目录下找 YModelCil 和 lib 文件夹: n6 o% b/ e$ ^- Z- [+ M

    1 s; w  c3 a1 f& g7 Q: G
    / c, Y. W2 m7 i4 J" f
    $ L( w( S) Z7 d' K然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。
    " n* f' O2 t6 S, g8 i- k) g  R8 I4 P, _  s# s" L, x* ^9 S
    建模外部库所需的文件有:
    * J6 ]& n' s- `' R1 g0 O. ^+ H. y/ a- p4 A6 b, J1 J- B2 N6 h
    1>易明建模目录的YModelCil中含有以下jar和xml: ^" y* Y' l8 |- }: i" R* x

    0 u9 Z  ~. G% R" hant-1.8.2.jar
    $ Z" K( @. w! ~9 d* U  k  wcommons-beanutils.jar
    ! s+ q, d0 M  n% O6 x- S1 Dcommons-lang-2.6.jar
    * b! {8 I$ L/ y3 h5 aezmorph-1.0.2.jar
    0 k0 B. _$ O2 I  u. V4 i+ Jjson-lib-1.1-jdk13.jar
    0 y2 W* W6 R; U. z3 `. s: E( z, _raq-ymodel-cli-2.10.jar- {1 F9 g; Y& f0 a) o, D+ V( C: s
    userconfig.xml
    ; S" i$ w1 `5 Y( [2 h9 P' r) R* C! l" {. i! w4 e$ @+ |: I6 e% v. O- P
    2>易明建模的lib中含有以下jar
    ! H4 F6 \! X) D8 B' M! G
    : i, ^0 }* ^9 v$ s4 u; s/ y8 ?commons-io-2.4.jar
    2 R% O8 v. h3 v" Q0 i0 resproc-ext-20211104.jar+ z& V' t0 D, p& A
    fastjson-1.2.58.jar
    ! k4 s1 z2 K4 l  T/ y* r" Ggson-2.8.0.jar
    $ ^+ Y; Q, G) K1 S) X! }jackson-annotations-2.9.6.jar
    ; z( O- I* b2 u* `% H# Pjackson-core-2.9.6.jar* p# }, A9 P; ^' n( l* C
    jackson-databind-2.9.6.jar
    6 ^- A2 \+ M7 C1 {0 ojackson-databind-2.9.6-sources.jar% U% Z4 ^' `! {4 F- A1 a+ e
    jackson-dataformat-msgpack-0.8.14.jar1 {( E# Y1 v0 X, b4 p8 i% S+ W
    mining.jar- @9 y# N& o$ s, j
    msgpack-0.6.12.jar# g8 Z/ |* |5 {# R6 v$ h
    msgpack-core-0.8.16.jar3 B/ W" d- j; x- L$ o2 n/ \
    ) k" N$ n3 Q  K( J% v$ i" ?
    (b)设置userconfig.xml文件参数
    2 c( S5 Z+ i% d4 T* O8 ~1 l在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数
    ; }$ f5 X5 d/ S2 l% q' V" ~- H) j% g! q: r! i
    名称        参数说明
    & S" o% I' L/ {6 s; S- }1 s- usAppHome        易明建模的安装目录
    3 A  t" G0 n/ p$ o& V# UsPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7  A. z8 \" v! @9 G: x2 [+ C: P
    iPythonServerPort        Python服务网络端口
    . W7 r) k; I, i& |. \iPythonProcessNumber        Python进程数8 E& W7 u, X7 f+ S' h* Q, \2 e
    bAutoDecideImpute        是否智能补缺* D6 A$ A" x# H3 `9 C, }& D) [, L% X
    iResampleMultiple        重抽样次数% K* `; A' u/ t* m0 s
    其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。" s$ r6 L( [* N5 e" y1 {

    6 E" {- |  h. f1 |7 Y<?xml version="1.0" encoding="UTF-8"?>1 O- R" j6 B) N. y* C1 M9 r4 y: P
    <Config Version="1">/ E' R& j& @8 u
        <Options>3 z& M( ^6 t* G" n0 W! [+ [  z
            <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/>: R$ d( j+ t; ~
                    <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
    ! b: k& k$ a: U( U6 E- h5 D3 M                <Option Name="iPythonServerPort" Value="8510"/>% I) h2 [! [) }' j: C
                    <Option Name="iPythonProcessNumber" Value="2"/>
    / L6 l: t1 j& r: ^' T! Q8 j! ~              <Option Name="bAutoDecideImpute" Value="true"/>
    * j9 X' Y8 k! H                <Option Name="iResampleMultiple" Value="150"/>                               
    3 z; v+ V4 p9 A5 }& }    </Options>
    8 X& L$ S/ D: L' g; }' W6 l</Config>
    ) ^" v6 M3 v( z" k1" a9 F( F+ c7 E8 S
    2
    * b4 {4 p% U1 n8 G2 U3
    0 D7 C1 R0 ^' ~/ q; F- M, h7 e4" O1 X+ s! O; R
    5
    2 R3 B' j6 t3 o# I: x5 ~0 Q4 x6
    1 H1 t8 e! d# q4 y. F! e% c4 N2 g74 u; V8 G* L' i) D; s7 X& a3 X/ M- z
    8
    : U0 k' w# _4 d( X6 n9, q, p, P' m# r: b
    10
    * v! C0 |% D. @& S11! t) u3 T, @1 x  c. I
    其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。7 ]- l" P0 ]: M+ _
    8 {3 L: j6 e1 Z, E- l/ ^
    (c)SPL环境配置" x, Z) B' h: P/ x+ }
    1>. 配置外部库
    4 c4 N0 j, m6 p& U7 H* F$ g0 A: d  e" Y, a/ w, }# ?3 V. i
    打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。. [) w4 X# j5 g: q1 J: O& |4 l$ d

    / S, C; y9 L: x& o5 }
    : P7 ]) R- N& ~* ]1 s
    , z2 P" n9 M; ~8 J9 ^在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。
    ) J; `$ T2 j: Z" w+ A" d
    ; f  c1 _8 h  H<extLibsPath>外部库路径) p  |+ x$ k0 i

    : D  W$ K0 q8 j) A- g( g& P<importLibs>外部库名称(可多个)
    * _7 _7 q5 I* h/ g0 T6 y8 m2 ]0 ^4 A: k8 [0 ?
    2>. 线程数设置& J& g' k1 x+ A( ~( r( o7 @
    $ }& w( B- ?) ^9 u) p  q
    如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。. N; a/ F1 X" r7 `5 p
    3 D9 v( r5 q  a
    . R9 u+ `. |0 i( I# A; g

    * V( B- W, p' r+ L3 g3 ?8 q' H在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。
    5 ^, |6 k3 H" Z) w% R: L8 J* Y" p- w: w- J7 n- l/ a9 X
    <parallelNum>最大并行数
    + P, y- ]! }) }) d
    + k# l' p) C! G, Z' G: ~到此,环境配置完成。
    3 b  i# z3 L! N+ z  v6 B  v, U+ F0 t2 s" W$ c
    3. 建模和预测
    % P: W+ E6 B- O5 l0 }. e(1)加载数据; Z% e% P+ A% l0 f
    SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。. z' S6 h  `7 n8 |9 }

      j3 F: N; W  Z7 h设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。+ d3 Q7 Z% Z: a

    ; a4 C. {5 \* H9 R! H) E7 P3 k' d4 ^% M7 u( `7 L7 O8 L9 t
    + H+ A. L1 Y' r$ u# }+ e& ~
    文件命名为bank-full.csv;
    3 s; M: {; @# h
    7 K/ p7 d6 t) T& G, UA1 ]5 P- o1 D! I% g
    1        =file("bank-full.csv").import@tc()
      ]2 ?$ D( }; G. O# |6 ]: P2        =ym_env()! e4 M" ]" A, Y+ ^0 l- r0 t
    3        =ym_model(A2,A1)
    ! O* C% o+ m! d7 ^+ r1 LA1 导入建模数据,读成序表8 _7 u- C" j( H1 O

    - O8 t, `, o) ^' |: j
      {( c, @: J9 L6 c/ X2 y5 w( l8 r# d. K- M1 O/ _# t
    A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。) P: _3 h: c% B# h

    , d# u' F- N; P+ A# O8 TA3 加载建模文件,生成md对象. ]  N% ~3 W! Y" l3 K

    , L" X9 ^' @: r) u8 k  C/ r$ Q9 W(2)目标变量设置和变量统计7 }( y$ C( \, k7 |# B
    数据加载进来后要设置目标变量
    2 A8 `, h2 c1 C. p  `7 Q
    ' Q1 _" m+ v8 b1 u8 ]& C8 O0 IA  c+ N4 ~4 `1 |. K" j
    …        …; Q; J" Z5 f( O
    4        =ym_target(A3,"y")# R. P3 f/ b8 @% l: S6 p0 u
    5        =ym_statistics(A3,"age"): p) p( g3 z3 d% o7 ]* g: K
    6        =A1.fname().(ym_statistics(A3,~))
    9 l* d' R% V  d% V- E0 o; wA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。
    6 M" G! l- Q' v6 m# [
    $ Y0 u) U, B+ q5 t* f5 R, ?A5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。, g' e* U0 l  S: z

    ; Q- t( x; y0 e% `0 L4 \$ z0 i! s- K# {# l/ i, r

    4 ?: U* f' t! Z6 v$ rA6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。
    2 u( B1 y- M' _6 B& I
    ! w" I; }. G4 O# `
    , _1 g8 C3 M& |/ h
    ) K) m% q( h$ o" q) h(3)建立模型和模型表现) o2 j$ B3 x) m$ e3 E
    A- A) ]( q$ l& ~& l3 U" G8 G/ q
    …        …
    9 S+ u" K. z+ m7        =ym_build_model(A3)
    ' B2 C3 T5 f: k5 M* Y8        =ym_present(A7)1 L% ^1 Z2 X6 J% J
    9        =ym_performance(A7)
    , g0 @. O/ e, T1 A2 z10        =ym_importance(A7).sort@z(Importance)
    + [- @' t$ V- B" t& BA7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。0 J0 @1 ^: O$ K

    - \3 k# T6 a3 S# M模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。: m6 T0 I) e- I  U2 T& Q1 O. ~1 S+ k

    & W( s( `% I* B% P* [6 V$ Y1 oA8 返回模型AUC值及参数
    ( B, b# k% j, p9 w/ F0 k+ v- ?0 Z- E7 d2 ~+ j# O& X7 D7 g

    ! g2 E2 j% j  w8 X; U7 @/ g
    4 O; Z5 ?! s4 T9 n/ W5 WA9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
    + J6 ~1 ]! t$ k* d- K. J9 A6 L# ^0 n) I9 e) [1 V

    ( o8 A% J% a8 |
    8 o+ z4 J' z7 u2 r3 t* h- N& h; u比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线
    , _' t/ `' M: q0 \) b9 @- Z! }6 K# I% D4 p$ O
    : c5 X% F5 n3 M  F4 Q* o! {* \1 Y

    : L7 M& f* K$ JA10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。" L" p, h/ {# B: s2 P

    5 v% E+ W5 B7 c1 R8 [
    + z/ t) n2 o* d+ G/ |" ~* a0 U  `1 F1 [/ @; H3 ?/ R# `
    (4)保存模型
    ) \+ Y* I5 X3 h- }% RA' M8 W/ n/ [- ~: N+ m8 H: J+ q
    …        …' m$ ^+ R& {& l# i8 N
    11        =ym_save_pcf(A7,"bankfull.pcf")
    $ x! l0 \. V: V; R4 ^6 k; s5 |12        =ym_json(A7)
    3 ]$ Y/ ^2 g# ]4 h! l5 ~5 Q13        >ym_close(A2)
    $ g1 h+ \* E) _3 Y' ]/ IA11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。0 h5 }& E6 h$ g+ T3 w+ w) m
    - q# `6 O/ X# `: I$ z
    A12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》
    $ s  l- E; ^7 w0 O
    ' x2 x# [, h$ j9 c. w7 r' XA13 关闭环境,释放资源。$ o% e6 h! R" Q3 G+ I( t

    # e+ A! X! b6 [(5)预测* J. R3 A7 `  I" e  ~$ u
    预测之前需要有pcf模型文件和预测数据集, b$ E& h/ G9 b& P! t
    6 h5 E; r# N7 p* i
    A  L0 m+ @: t# [* p
    1        =ym_env()
    ; Z  y0 ?! Y" V* M" U4 Y6 X2        =ym_load_pcf("bankfull.pcf")
    9 h3 G) x; K. Z4 S3        =file("bank-full2.csv").import@tc()% d; C! Q! c# \6 s3 i7 ^2 R
    4        =ym_predict(A2,A3)
    . f1 |' u/ l9 Y% I5 v5        =ym_result(A3)
    - f' C( `% v( _/ Q3 W' U% D# L* i6        =file("bank-full_result.csv").export@tc(A4)( I$ T3 X' [& z: s8 N% \( Y
    7        >ym_close(A1)2 g  q- K4 G$ S& R
    A1 初始化环境/ E7 U% V: {" d2 i/ r- H
    2 j+ H$ ]/ D; Z
    A2 导入pcf模型文件,生成pd模型对象。! x6 ], D0 V' N3 `1 J- o9 r6 {  s, u
    4 v- z- r& k% h6 e6 E( b6 e7 x& j
    A3 导入预测数据集,读成序表" R# i2 x  ~: t

    * L# s" K& T* OA4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
    * T( E# h4 d% @  O5 ?9 o7 G+ b  K6 W- p3 ~. g. h7 j
    A5 获取预测结果
    ; |2 o* q4 {4 E; W( l+ J
    + R, X, D8 W7 j" z  OA6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。
    , h( |+ P! a% U$ R1 {9 b; x; {* b5 p* H( w3 u; v- U$ U

    ( P/ E; c1 v& k6 |A7 关闭环境,释放资源
    1 N+ V+ }% O5 @
    6 C/ G2 @/ j+ C5 o; o" U4. 集成调用
    $ a  l% M8 |+ `7 ~, `; n. O" @( F8 {SPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/16157653465606 H9 n8 y" D. u7 Z9 b
    * l) S7 |4 L) i% G' B! z
    总结
    $ p( Z% D( c+ F$ c" X使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。8 I( Z. R# J4 d2 U0 N

    5 _# U  n+ G$ k/ S: ZSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。5 E5 [! O! ?$ Y- o  O, `
    ————————————————  H9 B1 {9 I$ H9 t5 }6 V1 I
    版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ s3 U3 v) P' D8 Q: q* m- ~: r' n8 L
    原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462' G9 F* v* q6 [. [

    7 x- e- _1 t2 h' Z! j
    " ^0 _* y* G+ m5 g
    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 18:49 , Processed in 0.400897 second(s), 50 queries .

    回顶部