aigroup-econ-mcp 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aigroup-econ-mcp might be problematic. Click here for more details.

@@ -10,7 +10,7 @@ AIGroup 计量经济学 MCP 服务
10
10
  - 模型诊断
11
11
  """
12
12
 
13
- __version__ = "0.1.0"
13
+ __version__ = "0.1.2"
14
14
  __author__ = "AIGroup"
15
15
  __description__ = "专业计量经济学MCP工具 - 让大模型直接进行数据分析"
16
16
 
aigroup_econ_mcp/cli.py CHANGED
@@ -2,21 +2,32 @@
2
2
  AIGroup 计量经济学 MCP 服务命令行入口
3
3
  """
4
4
 
5
+ import sys
5
6
  import click
6
- import uvicorn
7
7
  from .server import create_mcp_server
8
8
 
9
9
 
10
10
  @click.command()
11
11
  @click.option('--port', default=8000, help='服务器端口')
12
12
  @click.option('--host', default='127.0.0.1', help='服务器地址')
13
- @click.option('--transport', default='streamable-http',
13
+ @click.option('--transport', default='stdio',
14
14
  type=click.Choice(['stdio', 'streamable-http', 'sse']),
15
- help='传输协议')
15
+ help='传输协议 (默认: stdio)')
16
16
  @click.option('--debug', is_flag=True, help='启用调试模式')
17
17
  @click.option('--mount-path', default=None, help='挂载路径')
18
- def main(port: int, host: str, transport: str, debug: bool, mount_path: str):
19
- """启动aigroup-econ-mcp服务器"""
18
+ @click.option('--version', is_flag=True, help='显示版本信息')
19
+ def cli(port: int, host: str, transport: str, debug: bool, mount_path: str, version: bool):
20
+ """AIGroup 计量经济学 MCP 工具
21
+
22
+ 默认以stdio模式启动MCP服务器,适用于MCP客户端集成。
23
+ """
24
+
25
+ # 处理版本标志
26
+ if version:
27
+ click.echo("aigroup-econ-mcp v0.1.0", err=True)
28
+ click.echo("Professional econometrics MCP tool", err=True)
29
+ click.echo("Author: AIGroup", err=True)
30
+ sys.exit(0)
20
31
 
21
32
  # 创建MCP服务器
22
33
  mcp_server = create_mcp_server()
@@ -24,29 +35,41 @@ def main(port: int, host: str, transport: str, debug: bool, mount_path: str):
24
35
  # 设置调试模式
25
36
  if debug:
26
37
  mcp_server.settings.debug = True
27
- click.echo(f"[DEBUG] 调试模式已启用")
28
-
29
- click.echo(f"[INFO] Starting aigroup-econ-mcp server")
30
- click.echo(f"[INFO] Professional econometrics MCP tool for AI data analysis")
31
- click.echo(f"[INFO] Transport protocol: {transport}")
32
- click.echo(f"[INFO] Service address: http://{host}:{port}")
33
- if mount_path:
34
- click.echo(f"[INFO] Mount path: {mount_path}")
38
+ click.echo(f"[DEBUG] 调试模式已启用", err=True)
35
39
 
36
40
  # 根据传输协议启动服务器
37
41
  if transport == 'stdio':
38
- # stdio模式直接运行
42
+ # stdio模式直接运行,不输出任何日志到stdout(MCP协议通信)
43
+ # 所有日志输出到stderr
44
+ if debug:
45
+ click.echo(f"[DEBUG] Starting in stdio mode", err=True)
39
46
  mcp_server.run(transport='stdio')
47
+
40
48
  elif transport == 'streamable-http':
41
49
  # Streamable HTTP模式
50
+ click.echo(f"[INFO] Starting aigroup-econ-mcp server", err=True)
51
+ click.echo(f"[INFO] Professional econometrics MCP tool for AI data analysis", err=True)
52
+ click.echo(f"[INFO] Transport protocol: {transport}", err=True)
53
+ click.echo(f"[INFO] Service address: http://{host}:{port}", err=True)
54
+ if mount_path:
55
+ click.echo(f"[INFO] Mount path: {mount_path}", err=True)
56
+
42
57
  mcp_server.run(
43
58
  transport='streamable-http',
44
59
  host=host,
45
60
  port=port,
46
61
  mount_path=mount_path or '/mcp'
47
62
  )
63
+
48
64
  elif transport == 'sse':
49
65
  # SSE模式
66
+ click.echo(f"[INFO] Starting aigroup-econ-mcp server", err=True)
67
+ click.echo(f"[INFO] Professional econometrics MCP tool for AI data analysis", err=True)
68
+ click.echo(f"[INFO] Transport protocol: {transport}", err=True)
69
+ click.echo(f"[INFO] Service address: http://{host}:{port}", err=True)
70
+ if mount_path:
71
+ click.echo(f"[INFO] Mount path: {mount_path}", err=True)
72
+
50
73
  mcp_server.run(
51
74
  transport='sse',
52
75
  host=host,
@@ -55,24 +78,5 @@ def main(port: int, host: str, transport: str, debug: bool, mount_path: str):
55
78
  )
56
79
 
57
80
 
58
- @click.command()
59
- def version():
60
- """Show version information"""
61
- click.echo("aigroup-econ-mcp v0.1.0")
62
- click.echo("Professional econometrics MCP tool")
63
- click.echo("Author: AIGroup")
64
-
65
-
66
- @click.group()
67
- def cli():
68
- """AIGroup 计量经济学 MCP 工具"""
69
- pass
70
-
71
-
72
- # 添加子命令
73
- cli.add_command(main)
74
- cli.add_command(version)
75
-
76
-
77
81
  if __name__ == "__main__":
78
82
  cli()
@@ -11,6 +11,7 @@ from dataclasses import dataclass
11
11
  import pandas as pd
12
12
  import numpy as np
13
13
  import statsmodels.api as sm
14
+ from statsmodels.tsa import stattools
14
15
  from scipy import stats
15
16
  from pydantic import BaseModel, Field
16
17
 
@@ -151,12 +152,54 @@ def economic_analysis_prompt(data_description: str, analysis_type: str = "descri
151
152
  @mcp.tool()
152
153
  async def descriptive_statistics(
153
154
  ctx: Context[ServerSession, AppContext],
154
- data: Dict[str, List[float]]
155
+ data: Annotated[
156
+ Dict[str, List[float]],
157
+ Field(
158
+ description="""数据字典,格式为 {变量名: [数值列表]}
159
+
160
+ 示例格式:
161
+ {
162
+ "GDP增长率": [3.2, 2.8, 3.5, 2.9],
163
+ "通货膨胀率": [2.1, 2.3, 1.9, 2.4],
164
+ "失业率": [4.5, 4.2, 4.0, 4.3]
165
+ }
166
+
167
+ 要求:
168
+ - 至少包含一个变量
169
+ - 每个变量的数据点数量应相同
170
+ - 数值必须为浮点数或整数
171
+ - 建议样本量 >= 30 以获得可靠的统计推断"""
172
+ )
173
+ ]
155
174
  ) -> Annotated[CallToolResult, DescriptiveStatsResult]:
156
175
  """计算描述性统计量
176
+
177
+ 📊 功能说明:
178
+ 对输入数据进行全面的描述性统计分析,包括集中趋势、离散程度、分布形状等指标。
179
+
180
+ 📈 输出指标:
181
+ - 样本数量 (count)
182
+ - 均值 (mean):数据的平均水平
183
+ - 标准差 (std):数据的离散程度
184
+ - 最小值/最大值 (min/max):数据的取值范围
185
+ - 中位数 (median):数据的中间值,对异常值不敏感
186
+ - 偏度 (skewness):分布的对称性,0表示对称,>0右偏,<0左偏
187
+ - 峰度 (kurtosis):分布的尖峭程度,0表示正态分布
188
+ - 相关系数矩阵:变量间的线性相关关系
189
+
190
+ 💡 使用场景:
191
+ - 初步了解数据的分布特征
192
+ - 检查数据质量和异常值
193
+ - 为后续建模提供基础信息
194
+ - 比较不同变量的统计特征
195
+
196
+ ⚠️ 注意事项:
197
+ - 偏度绝对值 > 1 表示数据明显偏斜,可能需要转换
198
+ - 峰度绝对值 > 3 表示尖峭或扁平分布
199
+ - 相关系数 > 0.8 表示强相关,可能存在多重共线性
157
200
 
158
201
  Args:
159
- data: 字典格式的数据,键为变量名,值为数值列表
202
+ data: 数据字典,键为变量名,值为数值列表
160
203
  ctx: MCP上下文对象
161
204
  """
162
205
  await ctx.info(f"开始计算描述性统计,处理 {len(data)} 个变量")
@@ -210,16 +253,85 @@ async def descriptive_statistics(
210
253
  @mcp.tool()
211
254
  async def ols_regression(
212
255
  ctx: Context[ServerSession, AppContext],
213
- y_data: List[float],
214
- x_data: List[List[float]],
215
- feature_names: Optional[List[str]] = None
256
+ y_data: Annotated[
257
+ List[float],
258
+ Field(
259
+ description="""因变量数据(被解释变量/响应变量)
260
+
261
+ 示例:[12000, 13500, 11800, 14200, 15100]
262
+
263
+ 要求:
264
+ - 必须为数值列表
265
+ - 长度必须与自变量观测数量一致
266
+ - 不能包含缺失值(NaN)
267
+ - 建议样本量 >= 30"""
268
+ )
269
+ ],
270
+ x_data: Annotated[
271
+ List[List[float]],
272
+ Field(
273
+ description="""自变量数据(解释变量/预测变量),二维列表格式
274
+
275
+ 示例格式(3个观测,2个自变量):
276
+ [
277
+ [800, 5.2], # 第1个观测的自变量值
278
+ [900, 5.8], # 第2个观测的自变量值
279
+ [750, 4.9] # 第3个观测的自变量值
280
+ ]
281
+
282
+ 要求:
283
+ - 外层列表:每个元素代表一个观测
284
+ - 内层列表:该观测的所有自变量值
285
+ - 所有观测的自变量数量必须相同
286
+ - 观测数量必须与y_data长度一致
287
+ - 自变量数量建议 < 观测数量/10(避免过拟合)"""
288
+ )
289
+ ],
290
+ feature_names: Annotated[
291
+ Optional[List[str]],
292
+ Field(
293
+ default=None,
294
+ description="""自变量名称列表(可选)
295
+
296
+ 示例:["广告支出", "价格指数"]
297
+
298
+ 说明:
299
+ - 如果不提供,将自动命名为 x1, x2, x3...
300
+ - 名称数量必须与自变量数量一致
301
+ - 建议使用有意义的名称以便解释结果"""
302
+ )
303
+ ] = None
216
304
  ) -> Annotated[CallToolResult, OLSRegressionResult]:
217
- """执行OLS回归分析
305
+ """执行普通最小二乘法(OLS)回归分析
306
+
307
+ 📊 功能说明:
308
+ 使用最小二乘法估计线性回归模型,分析因变量与自变量之间的线性关系。
309
+ 模型形式:Y = β₀ + β₁X₁ + β₂X₂ + ... + βₖXₖ + ε
310
+
311
+ 📈 输出指标:
312
+ - R²:决定系数,取值0-1,衡量模型拟合优度
313
+ - 调整R²:考虑自变量数量的修正R²
314
+ - F统计量及p值:检验模型整体显著性
315
+ - AIC/BIC:信息准则,用于模型比较,越小越好
316
+ - 回归系数:每个自变量的估计值、标准误、t统计量、p值、置信区间
317
+
318
+ 💡 使用场景:
319
+ - 因果关系分析(如广告支出对销售额的影响)
320
+ - 预测建模(如根据经济指标预测GDP)
321
+ - 控制变量分析(如研究教育回报率时控制工作经验)
322
+ - 假设检验(如检验某变量是否对结果有显著影响)
323
+
324
+ ⚠️ 注意事项:
325
+ - R² > 0.7 表示拟合良好,但需警惕过拟合
326
+ - p值 < 0.05 表示该系数在5%水平显著
327
+ - 需检查残差的正态性、同方差性和独立性假设
328
+ - 自变量间高度相关(相关系数>0.8)可能导致多重共线性问题
329
+ - 样本量过小可能导致不可靠的估计结果
218
330
 
219
331
  Args:
220
332
  y_data: 因变量数据
221
333
  x_data: 自变量数据,每行一个观测
222
- feature_names: 自变量名称
334
+ feature_names: 自变量名称(可选)
223
335
  ctx: MCP上下文对象
224
336
  """
225
337
  await ctx.info(f"开始OLS回归分析,样本大小: {len(y_data)},自变量数量: {len(x_data[0]) if x_data else 0}")
@@ -285,16 +397,97 @@ async def ols_regression(
285
397
  @mcp.tool()
286
398
  async def hypothesis_testing(
287
399
  ctx: Context[ServerSession, AppContext],
288
- data1: List[float],
289
- data2: Optional[List[float]] = None,
290
- test_type: str = "t_test"
400
+ data1: Annotated[
401
+ List[float],
402
+ Field(
403
+ description="""第一组数据或单一样本数据
404
+
405
+ 示例:[3.2, 2.8, 3.5, 2.9, 3.1, 2.7, 3.3]
406
+
407
+ 要求:
408
+ - 必须为数值列表
409
+ - 不能包含缺失值
410
+ - 建议样本量 >= 30(大样本)
411
+ - t检验要求数据近似正态分布"""
412
+ )
413
+ ],
414
+ data2: Annotated[
415
+ Optional[List[float]],
416
+ Field(
417
+ default=None,
418
+ description="""第二组数据(可选,用于双样本检验)
419
+
420
+ 示例:[2.5, 2.9, 2.3, 2.6, 2.8]
421
+
422
+ 说明:
423
+ - 仅在双样本t检验时需要提供
424
+ - 单样本t检验时保持为None
425
+ - 两组数据可以有不同的样本量
426
+ - ADF检验不需要第二组数据"""
427
+ )
428
+ ] = None,
429
+ test_type: Annotated[
430
+ str,
431
+ Field(
432
+ default="t_test",
433
+ description="""假设检验类型
434
+
435
+ 可选值:
436
+ - "t_test": t检验(默认)
437
+ * 单样本t检验:检验样本均值是否等于0(data2=None)
438
+ * 双样本t检验:检验两组样本均值是否相等(提供data2)
439
+
440
+ - "adf": 增强迪基-富勒检验(Augmented Dickey-Fuller Test)
441
+ * 用于检验时间序列的平稳性
442
+ * 原假设:存在单位根(非平稳)
443
+ * p<0.05 拒绝原假设,序列平稳
444
+
445
+ 使用建议:
446
+ - 比较均值差异 → 使用 t_test
447
+ - 检验时间序列平稳性 → 使用 adf"""
448
+ )
449
+ ] = "t_test"
291
450
  ) -> Annotated[CallToolResult, HypothesisTestResult]:
292
- """执行假设检验
451
+ """执行统计假设检验
452
+
453
+ 📊 功能说明:
454
+ 对数据进行统计假设检验,判断样本是否支持某个统计假设。
455
+
456
+ 📈 检验类型详解:
457
+
458
+ 1️⃣ t检验 (t_test):
459
+ - 单样本:H₀: μ = 0 vs H₁: μ ≠ 0
460
+ - 双样本:H₀: μ₁ = μ₂ vs H₁: μ₁ ≠ μ₂
461
+ - 适用于小样本(n<30)且数据近似正态分布
462
+
463
+ 2️⃣ ADF检验 (adf):
464
+ - H₀: 序列存在单位根(非平稳)
465
+ - H₁: 序列不存在单位根(平稳)
466
+ - 用于时间序列分析前的平稳性检验
467
+
468
+ 📊 输出指标:
469
+ - 检验统计量:用于判断是否拒绝原假设
470
+ - p值:显著性水平,<0.05表示在5%水平显著
471
+ - 是否显著:基于5%显著性水平的判断
472
+ - 置信区间:参数的可能取值范围(仅t检验)
473
+
474
+ 💡 使用场景:
475
+ - 检验新药是否有效(单样本t检验)
476
+ - 比较两种教学方法的效果差异(双样本t检验)
477
+ - 检验股价序列是否平稳(ADF检验)
478
+ - 验证经济理论假说(如购买力平价理论)
479
+
480
+ ⚠️ 注意事项:
481
+ - p值 < 0.05:拒绝原假设(结果显著)
482
+ - p值 >= 0.05:不能拒绝原假设(结果不显著)
483
+ - t检验要求数据近似正态分布
484
+ - 小样本(<30)时t检验结果可能不可靠
485
+ - ADF检验中p<0.05表示序列平稳(拒绝非平稳假设)
293
486
 
294
487
  Args:
295
488
  data1: 第一组数据
296
- data2: 第二组数据(可选)
297
- test_type: 检验类型
489
+ data2: 第二组数据(可选,用于双样本检验)
490
+ test_type: 检验类型(t_test或adf)
298
491
  ctx: MCP上下文对象
299
492
  """
300
493
  await ctx.info(f"开始假设检验: {test_type}")
@@ -320,7 +513,7 @@ async def hypothesis_testing(
320
513
 
321
514
  elif test_type == "adf":
322
515
  # ADF单位根检验
323
- result = statsmodels.tsa.stattools.adfuller(data1)
516
+ result = stattools.adfuller(data1)
324
517
  test_result = HypothesisTestResult(
325
518
  test_type="adf",
326
519
  statistic=result[0],
@@ -358,23 +551,93 @@ async def hypothesis_testing(
358
551
  @mcp.tool()
359
552
  async def time_series_analysis(
360
553
  ctx: Context[ServerSession, AppContext],
361
- data: List[float]
554
+ data: Annotated[
555
+ List[float],
556
+ Field(
557
+ description="""时间序列数据(按时间顺序排列)
558
+
559
+ 示例格式:
560
+ [12000, 13500, 11800, 14200, 15100, 14800, 16200, 15900]
561
+ # 表示连续8期的观测值,如月度销售额
562
+
563
+ 要求:
564
+ - 必须按时间顺序排列(从早到晚)
565
+ - 建议至少30个观测点以获得可靠结果
566
+ - 数据应等间隔采样(如日度、月度、季度)
567
+ - 不能包含缺失值
568
+ - 数据量越大,ACF/PACF分析越准确
569
+
570
+ 应用示例:
571
+ - 股票价格序列
572
+ - GDP季度数据
573
+ - 月度销售额
574
+ - 日均气温数据"""
575
+ )
576
+ ]
362
577
  ) -> Annotated[CallToolResult, TimeSeriesStatsResult]:
363
- """时间序列分析
578
+ """时间序列统计分析
579
+
580
+ 📊 功能说明:
581
+ 对时间序列数据进行全面的统计分析,包括平稳性检验和自相关分析。
582
+
583
+ 📈 分析内容:
584
+
585
+ 1️⃣ ADF单位根检验(Augmented Dickey-Fuller Test):
586
+ - 检验序列是否平稳
587
+ - H₀: 存在单位根(序列非平稳)
588
+ - p < 0.05:拒绝原假设,序列平稳
589
+ - 平稳性是时间序列建模的基础
590
+
591
+ 2️⃣ 自相关函数(ACF):
592
+ - 衡量序列与其滞后值之间的相关性
593
+ - 用于识别MA模型的阶数
594
+ - 指数衰减→AR过程;q阶截尾→MA(q)过程
595
+
596
+ 3️⃣ 偏自相关函数(PACF):
597
+ - 剔除中间滞后项影响后的相关性
598
+ - 用于识别AR模型的阶数
599
+ - p阶截尾→AR(p)过程
600
+
601
+ 📊 输出指标:
602
+ - ADF统计量:越负越可能平稳
603
+ - ADF p值:<0.05表示序列平稳
604
+ - 平稳性判断:基于5%显著性水平
605
+ - ACF值:前20阶(或更少)的自相关系数
606
+ - PACF值:前20阶(或更少)的偏自相关系数
607
+
608
+ 💡 使用场景:
609
+ - ARIMA建模前的平稳性检验
610
+ - 识别合适的时间序列模型(AR、MA、ARMA)
611
+ - 检测季节性和趋势
612
+ - 评估序列的记忆性和持续性
613
+
614
+ ⚠️ 注意事项:
615
+ - 非平稳序列需要差分或变换后才能建模
616
+ - ACF和PACF应结合使用以识别模型类型
617
+ - 数据点太少(<30)可能导致不可靠的结果
618
+ - 强烈的季节性可能影响ACF/PACF的解读
619
+ - 建议同时观察ACF/PACF图形以获得更好的直观理解
620
+
621
+ 📖 结果解读:
622
+ - ADF p值 < 0.05 + ACF快速衰减 → 平稳序列,可直接建模
623
+ - ADF p值 >= 0.05 → 非平稳序列,需要差分处理
624
+ - PACF在p阶截尾 → 考虑AR(p)模型
625
+ - ACF在q阶截尾 → 考虑MA(q)模型
626
+ - ACF和PACF都衰减 → 考虑ARMA模型
364
627
 
365
628
  Args:
366
- data: 时间序列数据
629
+ data: 时间序列数据(按时间顺序)
367
630
  ctx: MCP上下文对象
368
631
  """
369
632
  await ctx.info(f"开始时间序列分析,数据点数量: {len(data)}")
370
633
 
371
634
  try:
372
635
  # ADF单位根检验
373
- adf_result = statsmodels.tsa.stattools.adfuller(data)
636
+ adf_result = stattools.adfuller(data)
374
637
 
375
638
  # 自相关和偏自相关函数
376
- acf_values = statsmodels.tsa.stattools.acf(data, nlags=min(20, len(data)-1))
377
- pacf_values = statsmodels.tsa.stattools.pacf(data, nlags=min(20, len(data)-1))
639
+ acf_values = stattools.acf(data, nlags=min(20, len(data)-1))
640
+ pacf_values = stattools.pacf(data, nlags=min(20, len(data)-1))
378
641
 
379
642
  result = TimeSeriesStatsResult(
380
643
  adf_statistic=adf_result[0],
@@ -412,14 +675,99 @@ async def time_series_analysis(
412
675
  @mcp.tool()
413
676
  async def correlation_analysis(
414
677
  ctx: Context[ServerSession, AppContext],
415
- data: Dict[str, List[float]],
416
- method: str = "pearson"
678
+ data: Annotated[
679
+ Dict[str, List[float]],
680
+ Field(
681
+ description="""多变量数据字典
682
+
683
+ 示例格式:
684
+ {
685
+ "销售额": [12000, 13500, 11800, 14200],
686
+ "广告支出": [800, 900, 750, 1000],
687
+ "价格": [99, 95, 102, 98],
688
+ "竞争对手数量": [3, 3, 4, 3]
689
+ }
690
+
691
+ 要求:
692
+ - 至少包含2个变量
693
+ - 所有变量的数据点数量必须相同
694
+ - 建议样本量 >= 30
695
+ - 数值不能包含缺失值
696
+
697
+ 应用:
698
+ - 探索变量间的关联关系
699
+ - 识别潜在的多重共线性
700
+ - 为回归分析筛选变量"""
701
+ )
702
+ ],
703
+ method: Annotated[
704
+ str,
705
+ Field(
706
+ default="pearson",
707
+ description="""相关系数计算方法
708
+
709
+ 可选值:
710
+ - "pearson": 皮尔逊相关系数(默认)
711
+ * 衡量线性相关关系
712
+ * 取值范围:-1到1
713
+ * 要求:数据近似正态分布
714
+ * 对异常值敏感
715
+
716
+ - "spearman": 斯皮尔曼秩相关系数
717
+ * 衡量单调相关关系(不要求线性)
718
+ * 基于数据的秩次
719
+ * 对异常值不敏感
720
+ * 适用于非正态分布
721
+
722
+ - "kendall": 肯德尔τ相关系数
723
+ * 衡量一致性程度
724
+ * 更稳健但计算较慢
725
+ * 适用于小样本和有序数据
726
+
727
+ 选择建议:
728
+ - 数据正态分布 + 关注线性关系 → pearson
729
+ - 数据有异常值或非正态 → spearman
730
+ - 有序分类数据 → kendall"""
731
+ )
732
+ ] = "pearson"
417
733
  ) -> str:
418
- """相关性分析
734
+ """变量间相关性分析
735
+
736
+ 📊 功能说明:
737
+ 计算多个变量之间的相关系数矩阵,揭示变量间的关联关系强度和方向。
738
+
739
+ 📈 相关系数解读:
740
+ - 相关系数范围:-1 到 +1
741
+ - |r| = 0.0-0.3:弱相关或无相关
742
+ - |r| = 0.3-0.7:中等程度相关
743
+ - |r| = 0.7-1.0:强相关
744
+ - r > 0:正相关(同向变化)
745
+ - r < 0:负相关(反向变化)
746
+ - r = 0:无线性相关
747
+
748
+ 💡 使用场景:
749
+ - 探索性数据分析(EDA)
750
+ - 回归分析前的变量筛选
751
+ - 识别多重共线性问题
752
+ - 构建投资组合(寻找低相关资产)
753
+ - 因子分析和主成分分析的前置步骤
754
+
755
+ ⚠️ 注意事项:
756
+ - 相关≠因果:高相关不代表因果关系
757
+ - 皮尔逊相关仅衡量线性关系,可能错过非线性关系
758
+ - 异常值会显著影响皮尔逊相关系数
759
+ - 回归分析中,自变量间相关系数>0.8可能导致多重共线性
760
+ - 小样本(<30)的相关系数可能不稳定
761
+
762
+ 📖 实际应用示例:
763
+ - 营销分析:广告支出与销售额的相关性
764
+ - 金融分析:不同股票收益率之间的相关性
765
+ - 经济研究:GDP增长与失业率的关系
766
+ - 多重共线性检测:回归模型中自变量间的相关性
419
767
 
420
768
  Args:
421
- data: 变量数据
422
- method: 相关系数类型
769
+ data: 变量数据字典
770
+ method: 相关系数类型(pearson/spearman/kendall)
423
771
  ctx: MCP上下文对象
424
772
  """
425
773
  await ctx.info(f"开始相关性分析: {method}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aigroup-econ-mcp
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: 专业计量经济学MCP工具 - 让大模型直接进行数据分析
5
5
  Project-URL: Homepage, https://github.com/aigroup/aigroup-econ-mcp
6
6
  Project-URL: Repository, https://github.com/aigroup/aigroup-econ-mcp.git
@@ -0,0 +1,12 @@
1
+ aigroup_econ_mcp/__init__.py,sha256=9Qc3GznVMCekXwmAAmIWQvljYIY2uGFtYMjvgHXaREE,472
2
+ aigroup_econ_mcp/cli.py,sha256=QEQjK6Y7TpgLHpdd8QqQhCjATkJ3-BjYjiXaB4HbJMk,2972
3
+ aigroup_econ_mcp/server.py,sha256=FQf8ElP2WNn0BNBFvRqDkCi3Mtw-vziNUjBPvfl4ZnA,26922
4
+ aigroup_econ_mcp/tools/__init__.py,sha256=o_mAyxeUVxh-xBrggUzS5Yg0uO9FjKvroLXQhFO6ezg,141
5
+ aigroup_econ_mcp/tools/regression.py,sha256=d-WiOSRSPIw5p7nFE6JE34ktQrBBXmZp6eQPfHXTFvA,6230
6
+ aigroup_econ_mcp/tools/statistics.py,sha256=arw5ahGBH4d4pS-wRHh_5z35Yf4LMpiUblR_TLZSbZ0,3415
7
+ aigroup_econ_mcp/tools/time_series.py,sha256=YFGBsKKA1a1FIH3x6gphw4bhVjgw8c-72ibJ4wOeDEM,8122
8
+ aigroup_econ_mcp-0.1.2.dist-info/METADATA,sha256=VoItN5CTf5jMDR6_2qrlk4iP1N3sxM7fuxS2HyGaUPA,5333
9
+ aigroup_econ_mcp-0.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
10
+ aigroup_econ_mcp-0.1.2.dist-info/entry_points.txt,sha256=j5ZJYOc4lAZV-X3XkAuGhzHtIRcJtZ6Gz8ZKPY_QTrM,62
11
+ aigroup_econ_mcp-0.1.2.dist-info/licenses/LICENSE,sha256=x4onvmayh9xPtyeLWVwM9av5hlduofabbcq2z45BbPY,1063
12
+ aigroup_econ_mcp-0.1.2.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- aigroup_econ_mcp/__init__.py,sha256=z14iciYc9LvvPliqwqkOx4lOuAcJFQL9iIQeHo9JF5Y,472
2
- aigroup_econ_mcp/cli.py,sha256=3Cq2W9GMMcv3lsHwQkRcNJv5GbJo8pQZylopXyQPOF4,2193
3
- aigroup_econ_mcp/server.py,sha256=jBPJNUP5rAGsE0EuPBLglNaXt5eIsDjWzFMbwZSfMiQ,14918
4
- aigroup_econ_mcp/tools/__init__.py,sha256=o_mAyxeUVxh-xBrggUzS5Yg0uO9FjKvroLXQhFO6ezg,141
5
- aigroup_econ_mcp/tools/regression.py,sha256=d-WiOSRSPIw5p7nFE6JE34ktQrBBXmZp6eQPfHXTFvA,6230
6
- aigroup_econ_mcp/tools/statistics.py,sha256=arw5ahGBH4d4pS-wRHh_5z35Yf4LMpiUblR_TLZSbZ0,3415
7
- aigroup_econ_mcp/tools/time_series.py,sha256=YFGBsKKA1a1FIH3x6gphw4bhVjgw8c-72ibJ4wOeDEM,8122
8
- aigroup_econ_mcp-0.1.0.dist-info/METADATA,sha256=gSaDlcS73fcUcJJcX-AVlyZkfvC4XGG-v7a0W-HGbiw,5333
9
- aigroup_econ_mcp-0.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
10
- aigroup_econ_mcp-0.1.0.dist-info/entry_points.txt,sha256=j5ZJYOc4lAZV-X3XkAuGhzHtIRcJtZ6Gz8ZKPY_QTrM,62
11
- aigroup_econ_mcp-0.1.0.dist-info/licenses/LICENSE,sha256=x4onvmayh9xPtyeLWVwM9av5hlduofabbcq2z45BbPY,1063
12
- aigroup_econ_mcp-0.1.0.dist-info/RECORD,,