关于 NCUA credit union data
ncua-data-analysis 将 NCUA 季度信用合作社报告整理为带说明的数据表和指标,并提供查询信用合作社及 FDIC 承保银行的 MCP 工具。它面向需要结构化行业数据的分析人员,支持同业比较和时间序列查询,无需直接处理宽表原始报告。
主要功能
- 01整理后的信用合作社季度数据
- 0252 项计算指标
- 03信用合作社资料和时间序列
- 04同业比较与筛选指标查询
- 05银行收入和指标工具
- 06含字段字典的 Parquet 数据
适用场景
- 01将机构与行业同业进行比较
- 02跟踪季度贷款和存款趋势
- 03查询信用合作社及银行指标
- 04分析银行季度收入
MCP 相关
MCP 服务提供信用合作社和银行的查找、资料、指标、时间序列、同业比较及季度收入工具。它可在本地通过 stdio 运行,也可使用托管的 Streamable HTTP 服务;查询为只读。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://ncua-data-analysis.fly.dev/mcpclaude mcp add --transport http bnovarini-ncua-data-analysis https://ncua-data-analysis.fly.dev/mcp{"mcpServers":{"bnovarini-ncua-data-analysis":{"type":"http","url":"https://ncua-data-analysis.fly.dev/mcp"}}}在 Cursor 中打开{"servers":{"bnovarini-ncua-data-analysis":{"type":"http","url":"https://ncua-data-analysis.fly.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"bnovarini-ncua-data-analysis":{"type":"http","url":"https://ncua-data-analysis.fly.dev/mcp"}}}{"mcpServers":{"bnovarini-ncua-data-analysis":{"serverUrl":"https://ncua-data-analysis.fly.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | |
| table | any | 否 | |
| search | any | 否 |
详细介绍
ncua-data-analysis
提供自 2018 年至今的 NCUA 季度信用合作社数据,经过清理并附有文档:涵盖贷款、存款构成、收益、人员配置和效率。
下方的 MCP 服务还涵盖 FDIC 承保的银行:包括两个行业的季度收入、效率、ROA 和同业基准分析。
NCUA 将每家联邦承保信用合作社的季度 5300 call report 作为免费批量文件发布。这些文件很难使用:超过 3,300 个账户列分散在 17 张宽表中,表单变更会导致账户位置变动,收入按年初至今统计,数据字典则是以表单说明的形式编写。本项目将这些数据整理为四张整洁的表,可通过 DuckDB、pandas 或任何能读取 Parquet 的工具进行查询。
状态:v0。包含 115 个精选字段和 52 个计算指标,共 34 个季度(2018 Q1 至 2026 Q2),并已与 NCUA 发布的官方总额核对。请参阅尚未完成的内容。
表
| 表 | 粒度 | 内容 |
|---|---|---|
dim_credit_union | 信用合作社 x 季度 | 名称、所在地、特许类型、同业组、低收入和 MDI 标记,以及 is_federally_insured。 |
fact_call_report_curated | 信用合作社 x 季度 | 115 个经过整理的账户值,采用直观的名称:资产负债表、股份和资本、存款构成(股份支票账户、普通账户、货币市场账户、定期存款、IRA、非成员存款)、各类贷款余额、贷款发放额、逾期贷款、冲销、损益表、员工和分支机构。 |
metrics | 信用合作社 x 季度 | 52 个计算指标:逾期率、贷款与股份比率、ROA、NIM、贷款和存款构成、增长率、效率比率、每名员工的会员数和资产额、每家分支机构的数据,以及拆分为单季度值的收入。 |
dictionary | 列 | 说明、单位、NCUA 账户代码,以及各字段有数据的首个和最后一个季度。 |
使用 quarter + cu_number 进行联接。金额字段的单位为美元。以 _ytd 结尾的字段表示年初至今的数据,每年 1 月重置(Q4 值为全年数据);metrics 会对这些字段进行年化处理。
-- Which large credit unions grew auto lending fastest last year?
SELECT d.name, d.state, m.auto_loan_growth_yoy, f.loans_new_vehicle + f.loans_used_vehicle AS auto_loans
FROM fact_call_report_curated f
JOIN dim_credit_union d USING (quarter, cu_number)
JOIN metrics m USING (quarter, cu_number)
WHERE f.quarter = '2026-06' AND d.is_federally_insured AND d.peer_group = 6
ORDER BY m.auto_loan_growth_yoy DESC LIMIT 10;
运行
pip install -e .
ncua-data all # download 34 quarters (~270 MB), build tables, reconcile
python -m unittest discover -s tests
输出将以 Parquet 格式写入 data/out/。原始 ZIP 文件不会提交到版本库。链接从 NCUA 的季度数据页面抓取。
值得信赖的数据
2026 年 6 月和 2025 年 12 月的数据总计与 NCUA《季度信用合作社数据摘要》中的数据一致:信用合作社数量、会员人数、各类贷款、股金、净资产比率、逾期率、收入和支出。在六个年末(2021 年至 2026 年 6 月)的 67 项核对中,有 60 项一致。其余 7 项是历史存款数据,差异不到 0.5B 美元(不到 0.1%),例如 2025 年 12 月的货币市场存款为 367.5B 美元,而公布值为 368.0B 美元。2026 年 6 月的所有数据项都一致。可能的原因是 NCUA 表格中的历史数据经过了重述,但这一点尚未得到确认。完整表格:docs/RECONCILIATION.md。
我们使用 2018-Q3 至 2026-Q2 的全部 32 份季度摘要,对收益率比率进行了审计。合并 ROA、净利差和净核销率,以及贷款收益率、资金成本、利差和 ROA 的中位数,在分母采用前一年度 12 月与当前余额的平均值(即 *_ncua_ytd 字段)时,均与 NCUA 公布的数据一致。年初至今的年化比率每年 1 月都会重置,NCUA 自行公布的数据也是如此;*_quarterly 字段是这里推导出的单季度版本,并非 NCUA 公布的数据。详情和少数不一致之处:docs/RATIO_AUDIT.md。
使用前请注意:
- 筛选
is_federally_insured。 NCUA 的原始文件中包含约 85 家由州政府特许、但未由 NCUA 承保的信用合作社。NCUA 公布的总计不包含这些机构。 - 表格在 2022 年和 2023 年发生了变化。 NCUA 重新设计了报告,并采用了 CECL,因此有些账户不再存在,也有一些新账户出现。跨越这次变更的字段会映射两种账户代码(例如,CECL 实施前的准备金账户代码为 Acct_719,之后为 Acct_AS0048)。仅在变更后存在的字段会在数据字典中注明。
- 净资产比率。 从 2023 年起,NCUA 公布的比率不包含 CECL 过渡准备金。本数据集保留了该准备金(
cecl_transition_provision),且metrics.net_worth_ratio_ex_cecl与 NCUA 的数据一致。 - 员工人数为估算值。
employees_fte_estimate的计算方式为全职员工人数加上兼职员工人数的一半。这不是 NCUA 的定义,也未与任何公布数据核对。 - 净核销率、ROA 和 NIM 使用 NCUA 自行计算的平均余额,这些数据并未公开。这里的指标使用四季度平均值,与 NCUA 公布的数据相差几个基点以内,但并不完全一致。
- 合并。 自 2018 年以来,信用合作社数量从 5,375 家降至 4,214 家。合并后的信用合作社历史数据仍归属原特许编号,因此,跨越合并期比较单家机构的增长没有意义。
- 报告由机构自行填报,有时会以“修订版”的形式重新发布。这里使用的是 NCUA 当前发布的 ZIP 文件。
尚未完成
- 按类型划分的商业贷款逾期数据(NCUA 于 2022 年将这些数据移至新的账户代码)。
- 更多字段。目标为 150 至 200 个;目前已收录并核验 115 个。
- 2018 年之前的数据(下载链接使用另外两种命名模式)。
- 静态分析网站和自然语言查询。该数据字典旨在作为其语义层。
MCP 服务(v1)
本地 MCP 服务可让 AI 助手用自然语言查询此数据集。它通过 stdio 运行,使用 DuckDB 读取发行版 Parquet 文件(仅下载一次至 ~/.cache/ncua-data-analysis),并根据字典表生成工具描述。
{
"mcpServers": {
"ncua-data": {
"command": "uvx",
"args": ["--from", "ncua-data-analysis", "ncua-data-mcp"]
}
}
}
此软件包发布在 PyPI:https://pypi.org/project/ncua-data-analysis/。若要改用最新的开发版本,请使用 "args": ["--from", "git+https://github.com/bnovarini/ncua-data-analysis", "ncua-data-mcp"]。
托管服务,无需安装: https://ncua-data-analysis.fly.dev/mcp(可流式传输的 HTTP、只读,每个客户端每分钟限 60 个请求)。将其添加为任何支持远程 MCP 服务的客户端中的远程 MCP 服务,例如 {"mcpServers": {"ncua-data": {"url": "https://ncua-data-analysis.fly.dev/mcp"}}}。
Claude Code:claude mcp add --transport http ncua-data https://ncua-data-analysis.fly.dev/mcp
托管服务的使用日志
托管服务会在持久化的 SQLite 日志中记录请求时间戳、事件类型、工具名称、客户端名称/版本(如果提供)、请求耗时和结果状态。它不会存储查询参数、结果、IP 地址或 User-Agent 标头。未知工具名称会记录为 (unknown),并返回 JSON-RPC -32601(方法未找到);这与受支持工具发生的错误相互独立。
从此代码库部署
在代码库根目录中运行 fly deploy --config deploy/fly.toml。Docker 构建会以代码库根目录作为上下文,并将私有季度面板和银行面板(cu-quarterly/、bank-quarterly/)打包到镜像中,因此本地构建时如果缺少这些目录,会按设计失败。usagelog 卷挂载到 /data,用于保存使用日志和缓存的数据集;更新时请保留该卷。deploy/usage-start.py 会启动启用了日志记录的 HTTP 服务。此代码库不应包含凭据、使用数据库或数据集文件。
此服务涵盖两个行业,时间范围为 2018-03 至 2026-06。信用合作社工具:list_fields、find_credit_union、credit_union_profile、metric_series(单家信用合作社或所有机构的汇总)、peer_compare(按资产组、州或特许类型比较)、query_metrics(筛选、排序和限制;不支持原始 SQL)以及 cu_quarter_income(单季度收入,含经认证的合并事件标签)。银行工具:find_bank(按名称查找)、bank_quarter_income(FDIC 官方季度收入,含简单差值标记和 Quarterly Banking Profile 对账标签)、bank_metric_series(单家银行或汇总机构的效率、ROA、利润率和收入构成,可按州或资产档次筛选),以及 bank_peer_compare(将一家银行与其资产档次、所在州或两者进行比较)。银行比率采用与信用合作社指标相同的公式,因此跨行业比较有效。
季度收入和银行工具需要的面板文件已打包到托管镜像中,且不在此代码库内;在本地安装时,这些工具会返回托管端点的链接。将 NCUA_DATA_DIR 设为已下载文件所在文件夹即可使用。本地客户端可使用 stdio,托管端点支持可流式传输的 HTTP。此服务已列入官方 MCP 注册表,名称为 io.github.bnovarini/ncua-data-analysis。
下载
现成的 Parquet 文件附在 v0.1.1 发布版本中。GitHub 对发布文件设有 25 MB 的大小限制,因此 fact_call_report_curated 和 metrics 按年份拆分为三个部分(2018-2020、2021-2023、2024-2026),且列完全相同:
import duckdb
base = "https://github.com/bnovarini/ncua-data-analysis/releases/download/v0.1.1/"
parts = [base + f"metrics_{y}.parquet" for y in ("2018_2020", "2021_2023", "2024_2026")]
duckdb.sql(f"SELECT quarter, count(*) FROM read_parquet({parts}) GROUP BY 1 ORDER BY 1").show()
数据来源和许可证
数据:美国国家信用合作社管理局(NCUA)的 5300 季度申报数据。银行数据:通过 FDIC 的 BankFind API 获取的 FFIEC 中央数据存储库申报数据,并与 FDIC 季度银行概况进行核对。NCUA 未在下载页面说明许可证。由于这是美国联邦机构的作品,因此假定其属于公有领域,但尚未确认这一假设。使用时请注明 NCUA。
代码:MIT,详见 LICENSE。
银行员工人数和每 FTE 营收
托管版 MCP 包含 bank_metric_series(field="employees_fte_reported")、list_bank_fields 和 revenue_per_employee。生产率工具可比较总部位于某个州的银行、信用合作社或两者,并提供输入值、排名、同业中位数、分页和明确的排除项。
示例:revenue_per_employee(state="NC", cu_number=18297) 会将 Coastal 与同一季度符合条件且总部位于 NC 的机构进行比较。若要只比较单一行业,请使用 sector="credit_union" 或 sector="bank"。
净营收指利息收入减去利息支出,再加上非利息收入。总营收指利息收入加上非利息收入。该比率将年初至今营收年化后除以季度末 FTE。它是运行速率,并非实际全年营收、净利润,也不是营收除以平均员工人数。
信用合作社的 FTE 为我们的估算值:NCUA 全职员工人数(账户 564A)加上兼职员工人数(账户 564B)的一半。银行的 FTE 则由银行通过 FDIC NUMEMP 报告。由于定义不同,跨行业比较仅供参考。总部所在州并不意味着所有业务都在该州开展。外包、业务组合和合并都会影响比较结果。员工人数为空或为零,以及已知的报告范围变更,都会被排除并计数。
托管版银行员工人数面板涵盖 2018Q1 至 2026Q2。员工人数不是金额,也不会按 1,000 缩放。本地软件包不包含银行员工数据;使用托管端点,或在自托管时提供单独的面板。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。