[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-dssg--aequitas":3,"tool-dssg--aequitas":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":80,"owner_twitter":81,"owner_website":82,"owner_url":83,"languages":84,"stars":117,"forks":118,"last_commit_at":119,"license":120,"difficulty_score":121,"env_os":122,"env_gpu":122,"env_ram":122,"env_deps":123,"category_tags":130,"github_topics":131,"view_count":10,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":136,"updated_at":137,"faqs":138,"releases":169},3968,"dssg\u002Faequitas","aequitas","Bias Auditing & Fair ML Toolkit","Aequitas 是一款专注于机器学习模型偏见审计与公平性优化的开源工具包。在人工智能日益深入社会决策的背景下，算法可能因训练数据或设计缺陷而对特定群体产生歧视，Aequitas 正是为解决这一关键问题而生。它能够帮助用户透明、便捷地检测模型在不同人群中的表现差异，识别潜在的公平性风险，并提供修正预测结果或优化训练流程的方法。\n\n这款工具特别适合数据科学家、机器学习研究人员以及政策制定者使用。无论是需要评估现有模型的合规性，还是希望在开发阶段就融入公平性考量，Aequitas 都能提供强有力的支持。其技术亮点在于不仅支持对二元分类模型进行多维度的偏见指标分析（如真阳性率、假阳性率等），还推出了全新的\"Aequitas Flow\"功能，允许用户在流水线中直接实验不同的公平性算法，甚至自定义修正策略。通过简单的 Python 接口和丰富的示例笔记，Aequitas 让复杂的公平性审计变得触手可及，助力构建更公正、可信的 AI 系统。","# *Aequitas*: Bias Auditing & \"Correction\" Toolkit\r\n\r\n[![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_1442e0c77cd9.png)](https:\u002F\u002Fpypi.org\u002Fproject\u002Faequitas\u002F)\r\n[![License: MIT](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_a10e02422dbe.png)](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002FLICENSE)\r\n[![Code style: black](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpython\u002Fblack)\r\n\r\n[comment]: \u003C> (Add badges for coverage when we have tests, update repo for other types of badges!)\r\n\r\n`aequitas` is an open-source bias auditing and Fair ML toolkit for data scientists, machine learning researchers, and policymakers. We provide an easy-to-use and transparent tool for auditing predictors of ML models, as well as experimenting with \"correcting biased model\" using Fair ML methods in binary classification settings.\r\n\r\nFor more context around dealing with bias and fairness issues in AI\u002F\u002FML systems, take a look at our [detailed tutorial](https:\u002F\u002Fdssg.github.io\u002Ffairness_tutorial\u002F) and related publications.\r\n\r\n\r\n> \r\n> **Version 1.0.0: Aequitas Flow - Optimizing Fairness in ML Pipelines**\r\n> \r\n> Explore Aequitas Flow, our latest update in version 1.0.0, designed to augment bias audits with bias mitigation and allow enrich  experimentation with Fair ML methods using our new, streamlined capabilities. \r\n> \r\n\r\n\r\n\u003Cp align=\"center\">\r\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Faequitas_logo.svg\" width=\"450\">\r\n\u003C\u002Fp>\r\n\r\n\r\n\r\n\u003Cp float=\"left\" align=\"center\">\r\n  \u003Ca href=\"#example-notebooks\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fdiagram.svg\" width=\"600\"\u002F>\u003C\u002Fa>\r\n\u003C\u002Fp>\r\n\r\n## 📥 Installation\r\n\r\n```cmd\r\npip install aequitas\r\n```\r\n\r\nor\r\n\r\n```cmd\r\npip install git+https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas.git\r\n```\r\n\r\n### 📔Example Notebooks supporting various tasks and workflows\r\n\r\n| Notebook | Description |\r\n|-|-|\r\n| [Audit a Model's Predictions](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Fcompas_demo.ipynb) | Check how to do an in-depth bias audit with the COMPAS example notebook or use your own data. |\r\n| [Correct a Model's Predictions](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_model_audit_and_correct.ipynb) | Create a dataframe to audit a specific model, and correct the predictions with group-specific thresholds in the Model correction notebook. |\r\n| [Train a Model with Fairness Considerations](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_experiment.ipynb) | Experiment with your own dataset or methods and check the results of a Fair ML experiment. |\r\n| [Add your method to Aequitas Flow](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_add_method.ipynb) | Learn how to add your own method to the Aequitas Flow toolkit. |\r\n\r\n\r\n### 🔍 Quickstart on Bias Auditing\r\n\r\nTo perform a bias audit, you need a pandas `DataFrame` with the following format:\r\n\r\n|     | label_value | score | sens_attr_1 | sens_attr_2 | ... | sens_attr_N |\r\n|-----|-------|-------|-------------|-------------|-----|-------------|\r\n| 0   | 0     | 0     | A           | F           |     | Y           |\r\n| 1   | 0     | 1     | C           | F           |     | N           |\r\n| 2   | 1     | 1     | B           | T           |     | N           |\r\n| ... |       |       |             |             |     |             |\r\n| N   | 1     | 0     | E           | T           |     | Y           |\r\n\r\nwhere `label_value` is the target variable for your prediction task and `score` is the model output.\r\nOnly one sensitive attribute is required; all must be in `Categorical` format.\r\n\r\n```python\r\nfrom aequitas import Audit\r\n\r\naudit = Audit(df)\r\n```\r\n\r\nTo obtain a summary of the bias audit, run:\r\n```python\r\n# Select the fairness metric of interest for your dataset\r\naudit.summary_plot([\"tpr\", \"fpr\", \"pprev\"])\r\n```\r\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fsummary_chart.svg\" width=\"900\">\r\n\r\nWe can also observe a single metric and sensitive attribute:\r\n```python\r\naudit.disparity_plot(attribute=\"sens_attr_2\", metrics=[\"fpr\"])\r\n```\r\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fdisparity_chart.svg\" width=\"900\">\r\n\r\n### 🧪 Quickstart on experimenting with Bias Reduction (Fair ML) methods\r\n\r\nTo perform an experiment, a dataset is required. It must have a label column, a sensitive attribute column, and features.  \r\n\r\n```python\r\nfrom aequitas.flow import DefaultExperiment\r\n\r\nexperiment = DefaultExperiment.from_pandas(dataset, target_feature=\"label_value\", sensitive_feature=\"attr\", experiment_size=\"small\")\r\nexperiment.run()\r\n\r\nexperiment.plot_pareto()\r\n```\r\n\r\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_e305b8fa9b17.png\" width=\"600\">\r\n\r\nThe [`DefaultExperiment`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Freadme-feedback-changes\u002Fsrc\u002Faequitas\u002Fflow\u002Fexperiment\u002Fdefault.py#L9) class allows for an easier entry-point to experiments in the package. This class has two main parameters to configure the experiment: `experiment_size` and `methods`. The former defines the size of the experiment, which can be either `test` (1 model per method), `small` (10 models per method), `medium` (50 models per method), or `large` (100 models per method). The latter defines the methods to be used in the experiment, which can be either `all` or a subset, namely `preprocessing` or `inprocessing`.\r\n\r\nSeveral aspects of an experiment (*e.g.*, algorithms, number of runs, dataset splitting) can be configured individually in more granular detail in the [`Experiment`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Freadme-feedback-changes\u002Fsrc\u002Faequitas\u002Fflow\u002Fexperiment\u002Fexperiment.py#L23) class.\r\n\r\n\r\n[comment]: \u003C> (Make default experiment this easy to run)\r\n\r\n### 🧠 Quickstart on Method Training\r\n\r\nAssuming an `aequitas.flow.Dataset`, it is possible to train methods and use their functionality depending on the type of algorithm (pre-, in-, or post-processing).\r\n\r\nFor pre-processing methods:\r\n```python\r\nfrom aequitas.flow.methods.preprocessing import PrevalenceSampling\r\n\r\nsampler = PrevalenceSampling()\r\nsampler.fit(dataset.train.X, dataset.train.y, dataset.train.s)\r\nX_sample, y_sample, s_sample = sampler.transform(dataset.train.X, dataset.train.y, dataset.train.s)\r\n```\r\n\r\nfor in-processing methods:\r\n```python\r\nfrom aequitas.flow.methods.inprocessing import FairGBM\r\n\r\nmodel = FairGBM()\r\nmodel.fit(X_sample, y_sample, s_sample)\r\nscores_val = model.predict_proba(dataset.validation.X, dataset.validation.y, dataset.validation.s)\r\nscores_test = model.predict_proba(dataset.test.X, dataset.test.y, dataset.test.s)\r\n```\r\n\r\nfor post-processing methods:\r\n```python\r\nfrom aequitas.flow.methods.postprocessing import BalancedGroupThreshold\r\n\r\nthreshold = BalancedGroupThreshold(\"top_pct\", 0.1, \"fpr\")\r\nthreshold.fit(dataset.validation.X, scores_val, dataset.validation.y, dataset.validation.s)\r\ncorrected_scores = threshold.transform(dataset.test.X, scores_test, dataset.test.s)\r\n```\r\n\r\nWith this sequence, we would sample a dataset, train a FairGBM model, and then adjust the scores to have equal FPR per group (achieving Predictive Equality).\r\n\r\n## 📜 Features of the Toolkit\r\n- **Metrics**: Audits based on confusion matrix-based metrics with flexibility to select the more important ones depending on use-case.\r\n- **Plotting options**: The major outcomes of bias auditing and experimenting offer also plots adequate to different user objectives. \r\n- **Fair ML methods**: Interface and implementation of several Fair ML methods, including pre-, in-, and post-processing methods.\r\n- **Datasets**: Two \"families\" of datasets included, named [BankAccountFraud](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2211.13358) and [FolkTables](https:\u002F\u002Farxiv.org\u002Fabs\u002F2108.04884).\r\n- **Extensibility**: Adapted to receive user-implemented methods, with intuitive interfaces and method signatures.\r\n- **Reproducibility**: Option to save artifacts of Experiments, from the transformed data to the fitted models and predictions.\r\n- **Modularity**: Fair ML Methods and default datasets can be used individually or integrated in an `Experiment`.\r\n- **Hyperparameter optimization**: Out of the box integration and abstraction of [Optuna](https:\u002F\u002Fgithub.com\u002Foptuna\u002Foptuna)'s hyperparameter optimization capabilities for experimentation.\r\n\r\n### Fair ML Methods\r\n\r\nWe support a range of methods designed to address bias and discrimination in different stages of the ML pipeline.\r\n\r\n\u003Ctable>\r\n  \u003Ctr>\r\n    \u003Cth rowspan=\"2\"> Type \u003C\u002Fth>\r\n    \u003Cth rowspan=\"2\"> Method \u003C\u002Fth>\r\n    \u003Cth rowspan=\"2\"> Description \u003C\u002Fth>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"12\"> Pre-processing \u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fdata_repairer.py\"> Data Repairer \u003C\u002Fa> \u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\"> Transforms the data distribution so that a given feature distribution is marginally independent of the sensitive attribute, s. \u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Flabel_flipping.py\"> Label Flipping \u003C\u002Fa> \u003C\u002Ftd> \r\n    \u003Ctd rowspan=\"2\"> Flips the labels of a fraction of the training data according to the Fair Ordering-Based Noise Correction method. \u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fprevalence_sample.py\"> Prevalence Sampling \u003C\u002Fa> \u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\"> Generates a training sample with controllable balanced prevalence for the groups in dataset, either by undersampling or oversampling. \u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fmassaging.py\">Massaging\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">Flips selected labels to reduce prevalence disparity between groups.\u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fcorrelation_suppression.py\">Correlation Suppression\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">Removes features that are highly correlated with the sensitive attribute.\u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Ffeature_importance_suppression.py\">Feature Importance Suppression\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">Iterively removes the most important features with respect to the sensitive attribute.\r\n    \u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"4\"> In-processing \u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Finprocessing\u002Ffairgbm.py\"> FairGBM \u003C\u002Fa> \u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\"> Novel method where a boosting trees algorithm (LightGBM) is subject to pre-defined fairness constraints. \u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Finprocessing\u002Ffairlearn_classifier.py\">Fairlearn Classifier\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\"> Models from the Fairlearn reductions package. Possible parameterization for ExponentiatedGradient and GridSearch methods.\u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"4\">Post-processing\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpostprocessing\u002Fgroup_threshold.py\">Group Threshold\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">Adjusts the threshold per group to obtain a certain fairness criterion (e.g., all groups with 10% FPR)\u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n  \u003Ctr>\r\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpostprocessing\u002Fbalanced_group_threshold.py\">Balanced Group Threshold\u003C\u002Ftd>\r\n    \u003Ctd rowspan=\"2\">Adjusts the threshold per group to obtain a certain fairness criterion, while satisfying a global constraint (e.g., Demographic Parity with a global FPR of 10%)\u003C\u002Ftd>\r\n  \u003C\u002Ftr>\r\n  \u003Ctr>\u003C\u002Ftr>\r\n\u003C\u002Ftable>\r\n\r\n### Fairness Metrics\r\n\r\n`aequitas` provides the value of confusion matrix metrics for each possible value of the sensitive attribute columns To calculate fairness metrics. The cells of the confusion metrics are:\r\n\r\n| Cell               | Symbol  | Description                                                    | \r\n|--------------------|:-------:|----------------------------------------------------------------|\r\n| **False Positive** | $FP_g$  | The number of entities of the group with $\\hat{Y}=1$ and $Y=0$ |\r\n| **False Negative** | $FN_g$  | The number of entities of the group with $\\hat{Y}=0$ and $Y=1$ |\r\n| **True Positive**  | $TP_g$  | The number of entities of the group with $\\hat{Y}=1$ and $Y=1$ |\r\n| **True Negative**  | $TN_g$  | The number of entities of the group with $\\hat{Y}=0$ and $Y=0$ |\r\n\r\nFrom these, we calculate several metrics:\r\n\r\n| Metric                        | Formula                                             | Description                                                                               | \r\n|-------------------------------|:---------------------------------------------------:|-------------------------------------------------------------------------------------------| \r\n| **Accuracy**                  | $Acc_g = \\cfrac{TP_g + TN_g}{\\|g\\|}$                | The fraction of correctly predicted entities withing the group.                           |\r\n| **True Positive Rate**        | $TPR_g = \\cfrac{TP_g}{TP_g + FN_g}$                 | The fraction of true positives within the label positive entities of a group.             |\r\n| **True Negative Rate**        | $TNR_g = \\cfrac{TN_g}{TN_g + FP_g}$                 | The fraction of true negatives within the label negative entities of a group.             |\r\n| **False Negative Rate**       | $FNR_g = \\cfrac{FN_g}{TP_g + FN_g}$                 | The fraction of false negatives within the label positive entities of a group.            |\r\n| **False Positive Rate**       | $FPR_g = \\cfrac{FP_g}{TN_g + FP_g}$                 | The fraction of false positives within the label negative entities of a group.            |\r\n| **Precision**                 | $Precision_g = \\cfrac{TP_g}{TP_g + FP_g}$           | The fraction of true positives within the predicted positive entities of a group.         |\r\n| **Negative Predictive Value** | $NPV_g = \\cfrac{TN_g}{TN_g + FN_g}$                 | The fraction of true negatives within the predicted negative entities of a group.         | \r\n| **False Discovery Rate**      | $FDR_g = \\cfrac{FP_g}{TP_g + FP_g}$                 | The fraction of false positives within the predicted positive entities of a group.        |\r\n| **False Omission Rate**       | $FOR_g = \\cfrac{FN_g}{TN_g + FN_g}$                 | The fraction of false negatives within the predicted negative entities of a group.        |\r\n| **Predicted Positive**        | $PP_g = TP_g + FP_g$                                |  The number of entities within a group where the decision is positive, i.e., $\\hat{Y}=1$. |\r\n| **Total Predictive Positive** | $K = \\sum PP_{g(a_i)}$                              | The total number of entities predicted positive across groups defined by $A$              | \r\n| **Predicted Negative**        | $PN_g = TN_g + FN_g$                                | The number of entities within a group where the decision is negative, i.e., $\\hat{Y}=0$   | \r\n| **Predicted Prevalence**      | $Pprev_g=\\cfrac{PP_g}{\\|g\\|}=P(\\hat{Y}=1 \\| A=a_i)$ | The fraction of entities within a group which were predicted as positive.                 | \r\n| **Predicted Positive Rate**   | $PPR_g = \\cfrac{PP_g}{K} = P(A=A_i \\| \\hat{Y}=1)$   | The fraction of the entities predicted as positive that belong to a certain group.        | \r\n\r\nThese are implemented in the [`Group`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fgroup.py) class. With the [`Bias`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fbias.py) class, several fairness metrics can be derived by different combinations of ratios of these metrics.\r\n\r\n\r\n## Further documentation\r\n\r\nYou can find the toolkit documentation [here](https:\u002F\u002Fdssg.github.io\u002Faequitas\u002F).\r\n\r\nFor more examples of the python library and a deep dive into concepts of fairness in ML, see our [Tutorial](https:\u002F\u002Fgithub.com\u002Fdssg\u002Ffairness_tutorial) presented on KDD and AAAI. Visit also the [Aequitas project website](http:\u002F\u002Fdsapp.uchicago.edu\u002Faequitas\u002F).\r\n\r\n## Citing Aequitas\r\n\r\nTo cite Aequitas, please refer to the following papers:\r\n\r\n1. Aequitas Flow: Streamlining Fair ML Experimentation (2024) [PDF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2405.05809)\r\n   \r\n```bib\r\n@article{jesus2024aequitas,\r\n  title={Aequitas Flow: Streamlining Fair ML Experimentation},\r\n  author={Jesus, S{\\'e}rgio and Saleiro, Pedro and Jorge, Beatriz M and Ribeiro, Rita P and Gama, Jo{\\~a}o and Bizarro, Pedro and Ghani, Rayid and others},\r\n  journal={arXiv preprint arXiv:2405.05809},\r\n  year={2024}\r\n}\r\n\r\n```\r\n\r\n2. Aequitas: A Bias and Fairness Audit Toolkit (2018) [PDF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F1811.05577.pdf)\r\n\r\n```bib\r\n   @article{2018aequitas,\r\n     title={Aequitas: A Bias and Fairness Audit Toolkit},\r\n     author={Saleiro, Pedro and Kuester, Benedict and Stevens, Abby and Anisfeld, Ari and Hinkson, Loren and London, Jesse and Ghani, Rayid}, journal={arXiv preprint arXiv:1811.05577}, year={2018}}\r\n``` \r\n\r\n[Back to top](#aequitas-bias-auditing--fair-ml-toolkit)\r\n","# *Aequitas*: 偏差审计与“修正”工具包\n\n[![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_1442e0c77cd9.png)](https:\u002F\u002Fpypi.org\u002Fproject\u002Faequitas\u002F)\n[![License: MIT](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_a10e02422dbe.png)](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002FLICENSE)\n[![Code style: black](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpython\u002Fblack)\n\n[comment]: \u003C> (待有测试后添加覆盖率徽章，并更新仓库以支持其他类型的徽章！)\n\n`aequitas` 是一款面向数据科学家、机器学习研究人员和政策制定者的开源偏差审计及公平机器学习工具包。我们提供了一个易于使用且透明的工具，用于审计机器学习模型的预测结果，并在二分类场景中利用公平机器学习方法尝试“修正有偏模型”。\n\n如需了解更多关于如何处理人工智能\u002F机器学习系统中的偏差与公平性问题，请参阅我们的[详细教程](https:\u002F\u002Fdssg.github.io\u002Ffairness_tutorial\u002F)及相关出版物。\n\n\n> \n> **版本 1.0.0：Aequitas Flow —— 优化机器学习流水线中的公平性**\n> \n> 欢迎探索 Aequitas Flow，这是我们 1.0.0 版本中的最新更新。它旨在通过偏差缓解增强偏差审计功能，并借助我们全新的简化功能，让用户更便捷地开展公平机器学习方法的实验。 \n> \n\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Faequitas_logo.svg\" width=\"450\">\n\u003C\u002Fp>\n\n\u003Cp float=\"left\" align=\"center\">\n  \u003Ca href=\"#example-notebooks\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fdiagram.svg\" width=\"600\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n## 📥 安装\n\n```cmd\npip install aequitas\n```\n\n或\n\n```cmd\npip install git+https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas.git\n```\n\n### 📔 示例笔记本支持各类任务与工作流\n\n| 笔记本 | 描述 |\n|-|-|\n| [审计模型的预测结果](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Fcompas_demo.ipynb) | 通过 COMPAS 示例笔记本了解如何进行深入的偏差审计，或使用您自己的数据。 |\n| [修正模型的预测结果](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_model_audit_and_correct.ipynb) | 在模型修正笔记本中，创建一个用于审计特定模型的数据框，并使用分组阈值修正预测结果。 |\n| [训练考虑公平性的模型](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_experiment.ipynb) | 使用您自己的数据或方法进行实验，并查看公平机器学习实验的结果。 |\n| [将您的方法加入 Aequitas Flow](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fdssg\u002Faequitas\u002Fblob\u002Fnotebooks\u002Faequitas_flow_add_method.ipynb) | 学习如何将自己的方法添加到 Aequitas Flow 工具包中。 |\n\n\n### 🔍 偏差审计快速入门\n\n要执行偏差审计，您需要一个符合以下格式的 pandas `DataFrame`：\n\n|     | label_value | score | sens_attr_1 | sens_attr_2 | ... | sens_attr_N |\n|-----|-------|-------|-------------|-------------|-----|-------------|\n| 0   | 0     | 0     | A           | F           |     | Y           |\n| 1   | 0     | 1     | C           | F           |     | N           |\n| 2   | 1     | 1     | B           | T           |     | N           |\n| ... |       |       |             |             |     |             |\n| N   | 1     | 0     | E           | T           |     | Y           |\n\n其中，`label_value` 是您的预测任务的目标变量，`score` 是模型输出。仅需一个敏感属性；所有敏感属性必须为 `Categorical` 格式。\n\n```python\nfrom aequitas import Audit\n\naudit = Audit(df)\n```\n\n要获取偏差审计的摘要，运行：\n```python\n# 选择适合您数据集的公平性指标\naudit.summary_plot([\"tpr\", \"fpr\", \"pprev\"])\n```\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fsummary_chart.svg\" width=\"900\">\n\n我们也可以观察单个指标和敏感属性：\n```python\naudit.disparity_plot(attribute=\"sens_attr_2\", metrics=[\"fpr\"])\n```\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdssg\u002Faequitas\u002Fmaster\u002Fdocs\u002F_images\u002Fdisparity_chart.svg\" width=\"900\">\n\n### 🧪 偏差减少（公平机器学习）方法实验快速入门\n\n要进行实验，需要一个数据集。该数据集必须包含标签列、敏感属性列和特征列。\n\n```python\nfrom aequitas.flow import DefaultExperiment\n\nexperiment = DefaultExperiment.from_pandas(dataset, target_feature=\"label_value\", sensitive_feature=\"attr\", experiment_size=\"small\")\nexperiment.run()\n\nexperiment.plot_pareto()\n```\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_readme_e305b8fa9b17.png\" width=\"600\">\n\n[`DefaultExperiment`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Freadme-feedback-changes\u002Fsrc\u002Faequitas\u002Fflow\u002Fexperiment\u002Fdefault.py#L9) 类为包内的实验提供了一个更简便的入口点。该类有两个主要参数用于配置实验：`experiment_size` 和 `methods`。前者定义实验规模，可选为 `test`（每种方法 1 个模型）、`small`（每种方法 10 个模型）、`medium`（每种方法 50 个模型）或 `large`（每种方法 100 个模型）。后者则定义实验中使用的方法，可以是 `all` 或子集，即 `preprocessing` 或 `inprocessing`。\n\n实验的多个方面（例如算法、运行次数、数据集划分等）可以在更为细粒度的 [`Experiment`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Freadme-feedback-changes\u002Fsrc\u002Faequitas\u002Fflow\u002Fexperiment\u002Fexperiment.py#L23) 类中单独配置。\n\n\n[comment]: \u003C> (使默认实验如此易于运行)\n\n### 🧠 方法训练快速入门\n\n假设有一个 `aequitas.flow.Dataset`，可以根据算法类型（预处理、事中处理或事后处理）训练方法并使用其功能。\n\n对于预处理方法：\n```python\nfrom aequitas.flow.methods.preprocessing import PrevalenceSampling\n\nsampler = PrevalenceSampling()\nsampler.fit(dataset.train.X, dataset.train.y, dataset.train.s)\nX_sample, y_sample, s_sample = sampler.transform(dataset.train.X, dataset.train.y, dataset.train.s)\n```\n\n对于事中处理方法：\n```python\nfrom aequitas.flow.methods.inprocessing import FairGBM\n\nmodel = FairGBM()\nmodel.fit(X_sample, y_sample, s_sample)\nscores_val = model.predict_proba(dataset.validation.X, dataset.validation.y, dataset.validation.s)\nscores_test = model.predict_proba(dataset.test.X, dataset.test.y, dataset.test.s)\n```\n\n对于事后处理方法：\n```python\nfrom aequitas.flow.methods.postprocessing import BalancedGroupThreshold\n\nthreshold = BalancedGroupThreshold(\"top_pct\", 0.1, \"fpr\")\nthreshold.fit(dataset.validation.X, scores_val, dataset.validation.y, dataset.validation.s)\ncorrected_scores = threshold.transform(dataset.test.X, scores_test, dataset.test.s)\n```\n\n通过上述步骤，我们可以对数据集进行采样，训练一个 FairGBM 模型，然后调整分数以使各组的 FPR 相等（实现预测平等）。\n\n## 📜 工具包特性\n- **指标**：基于混淆矩阵的审计指标，可根据具体用例灵活选择重要指标。\n- **绘图选项**：偏差审计和实验的主要结果还提供适合不同用户目标的图表。\n- **公平机器学习方法**：提供了多种公平机器学习方法的接口与实现，包括预处理、事中处理和事后处理方法。\n- **数据集**：包含两类数据集，分别名为 [BankAccountFraud](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2211.13358) 和 [FolkTables](https:\u002F\u002Farxiv.org\u002Fabs\u002F2108.04884)。\n- **可扩展性**：支持接收用户自定义的方法，并提供直观的接口和方法签名。\n- **可重复性**：可保存实验中的各种成果，从转换后的数据到拟合的模型和预测结果。\n- **模块化**：公平机器学习方法和默认数据集可以单独使用，也可以集成到一个 `Experiment` 中。\n- **超参数优化**：内置并抽象了 [Optuna](https:\u002F\u002Fgithub.com\u002Foptuna\u002Foptuna) 的超参数优化功能，便于实验使用。\n\n### 公平机器学习方法\n\n我们支持一系列旨在解决机器学习流程不同阶段中偏见和歧视问题的方法。\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Cth rowspan=\"2\"> 类型 \u003C\u002Fth>\n    \u003Cth rowspan=\"2\"> 方法 \u003C\u002Fth>\n    \u003Cth rowspan=\"2\"> 描述 \u003C\u002Fth>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"12\"> 预处理 \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fdata_repairer.py\"> 数据修复器 \u003C\u002Fa> \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 转换数据分布，使某一特征分布与敏感属性 s 在边际上独立。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Flabel_flipping.py\"> 标签翻转 \u003C\u002Fa> \u003C\u002Ftd> \n    \u003Ctd rowspan=\"2\"> 根据公平排序噪声校正方法，翻转部分训练数据的标签。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\"> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fprevalence_sample.py\"> 预值采样 \u003C\u002Fa> \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 生成具有可控均衡预值的训练样本，通过欠采样或过采样实现数据集中各组之间的平衡。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fmassaging.py\">按摩法\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 翻转选定的标签，以减少各组之间的预值差异。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Fcorrelation_suppression.py\">相关性抑制\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 移除与敏感属性高度相关的特征。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpreprocessing\u002Ffeature_importance_suppression.py\">特征重要性抑制\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 迭代移除对敏感属性影响最大的特征。\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"4\"> 事中处理 \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Finprocessing\u002Ffairgbm.py\"> FairGBM \u003C\u002Fa> \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 一种新颖的方法，将提升树算法（LightGBM）置于预先定义的公平性约束之下。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Finprocessing\u002Ffairlearn_classifier.py\">Fairlearn 分类器\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 基于 Fairlearn reductions 包中的模型。可针对 ExponentiatedGradient 和 GridSearch 方法进行参数化配置。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"4\"> 事后处理 \u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpostprocessing\u002Fgroup_threshold.py\">分组阈值\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 调整各组的阈值，以达到特定的公平性标准（例如，所有组的 FPR 均为 10%）。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fflow\u002Fmethods\u002Fpostprocessing\u002Fbalanced_group_threshold.py\">平衡分组阈值\u003C\u002Ftd>\n    \u003Ctd rowspan=\"2\"> 调整各组的阈值以满足特定的公平性标准，同时遵守全局约束（例如，人口统计均等性要求全局 FPR 为 10%）。 \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### 公平性度量\n\n`aequitas` 为敏感属性列的每个可能取值提供混淆矩阵指标的值，以计算公平性度量。混淆矩阵中的各个单元格定义如下：\n\n| 单元格               | 符号  | 描述                                                    | \n|--------------------|:-------:|----------------------------------------------------------------|\n| **假阳性**         | $FP_g$  | 在组 $g$ 中，预测为 $\\hat{Y}=1$ 且实际为 $Y=0$ 的实体数量 |\n| **假阴性**         | $FN_g$  | 在组 $g$ 中，预测为 $\\hat{Y}=0$ 且实际为 $Y=1$ 的实体数量 |\n| **真阳性**         | $TP_g$  | 在组 $g$ 中，预测为 $\\hat{Y}=1$ 且实际为 $Y=1$ 的实体数量 |\n| **真阴性**         | $TN_g$  | 在组 $g$ 中，预测为 $\\hat{Y}=0$ 且实际为 $Y=0$ 的实体数量 |\n\n基于这些指标，我们可以计算以下几种度量：\n\n| 度量                        | 公式                                             | 描述                                                                               | \n|-------------------------------|:---------------------------------------------------:|-------------------------------------------------------------------------------------------| \n| **准确率**                  | $Acc_g = \\cfrac{TP_g + TN_g}{\\|g\\|}$                | 组内预测正确的实体所占的比例。                           |\n| **真正例率**        | $TPR_g = \\cfrac{TP_g}{TP_g + FN_g}$                 | 在某一组的标签为正的实体中，真正例所占的比例。             |\n| **真负例率**        | $TNR_g = \\cfrac{TN_g}{TN_g + FP_g}$                 | 在某一组的标签为负的实体中，真负例所占的比例。             |\n| **假阴性率**       | $FNR_g = \\cfrac{FN_g}{TP_g + FN_g}$                 | 在某一组的标签为正的实体中，假阴性所占的比例。            |\n| **假阳性率**       | $FPR_g = \\cfrac{FP_g}{TN_g + FP_g}$                 | 在某一组的标签为负的实体中，假阳性所占的比例。            |\n| **精确率**                 | $Precision_g = \\cfrac{TP_g}{TP_g + FP_g}$           | 在某一组的预测为正的实体中，真正例所占的比例。         |\n| **负预测值**     | $NPV_g = \\cfrac{TN_g}{TN_g + FN_g}$                 | 在某一组的预测为负的实体中，真负例所占的比例。         | \n| **假发现率**      | $FDR_g = \\cfrac{FP_g}{TP_g + FP_g}$                 | 在某一组的预测为正的实体中，假阳性所占的比例。        |\n| **假漏报率**       | $FOR_g = \\cfrac{FN_g}{TN_g + FN_g}$                 | 在某一组的预测为负的实体中，假阴性所占的比例。        |\n| **预测为正**        | $PP_g = TP_g + FP_g$                                | 某一组中决策为正（即 $\\hat{Y}=1$）的实体数量。 |\n| **总预测为正**    | $K = \\sum PP_{g(a_i)}$                              | 由属性 $A$ 定义的不同组别中，所有被预测为正的实体总数              | \n| **预测为负**        | $PN_g = TN_g + FN_g$                                | 某一组中决策为负（即 $\\hat{Y}=0$）的实体数量   | \n| **预测阳性率**      | $Pprev_g=\\cfrac{PP_g}{\\|g\\|}=P(\\hat{Y}=1 \\| A=a_i)$ | 某一组中被预测为阳性的实体所占比例。                 | \n| **预测阳性率**   | $PPR_g = \\cfrac{PP_g}{K} = P(A=A_i \\| \\hat{Y}=1)$   | 被预测为正的实体中属于某一特定组别的比例。        | \n\n这些内容在 [`Group`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fgroup.py) 类中实现。借助 [`Bias`](https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fblob\u002Fmaster\u002Fsrc\u002Faequitas\u002Fbias.py) 类，可以通过对这些指标的各种比率组合，推导出多种公平性度量。\n\n## 更多文档\n\n您可以在 [这里](https:\u002F\u002Fdssg.github.io\u002Faequitas\u002F) 找到该工具包的文档。\n\n如需更多 Python 库示例以及关于机器学习公平性概念的深入探讨，请参阅我们在 KDD 和 AAAI 上发布的 [教程](https:\u002F\u002Fgithub.com\u002Fdssg\u002Ffairness_tutorial)。此外，您还可以访问 [Aequitas 项目网站](http:\u002F\u002Fdsapp.uchicago.edu\u002Faequitas\u002F)。\n\n## 引用 Aequitas\n\n引用 Aequitas 时，请参考以下论文：\n\n1. Aequitas Flow：简化公平机器学习实验流程（2024）[PDF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2405.05809)\n   \n```bib\n@article{jesus2024aequitas,\n  title={Aequitas Flow: Streamlining Fair ML Experimentation},\n  author={Jesus, S{\\'e}rgio and Saleiro, Pedro and Jorge, Beatriz M and Ribeiro, Rita P and Gama, Jo{\\~a}o and Bizarro, Pedro and Ghani, Rayid and others},\n  journal={arXiv preprint arXiv:2405.05809},\n  year={2024}\n}\n\n```\n\n\n2. Aequitas：偏见与公平性审计工具包（2018）[PDF](https:\u002F\u002Farxiv.org\u002Fpdf\u002F1811.05577.pdf)\n\n```bib\n   @article{2018aequitas,\n     title={Aequitas: A Bias and Fairness Audit Toolkit},\n     author={Saleiro, Pedro and Kuester, Benedict and Stevens, Abby and Anisfeld, Ari and Hinkson, Loren and London, Jesse and Ghani, Rayid}, journal={arXiv preprint arXiv:1811.05577}, year={2018}}\n``` \n\n[返回顶部](#aequitas-bias-auditing--fair-ml-toolkit)","# Aequitas 快速上手指南\n\nAequitas 是一个开源的偏差审计与公平机器学习（Fair ML）工具包，专为数据科学家、研究人员和政策制定者设计。它支持对二分类模型的预测结果进行透明度审计，并提供预处理、处理中和后处理等多种方法来修正模型偏差。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows\n*   **Python 版本**：建议 Python 3.8 及以上版本\n*   **核心依赖**：\n    *   `pandas`：用于数据处理\n    *   `numpy`：数值计算\n    *   `matplotlib` \u002F `seaborn`：用于绘制审计图表\n    *   `scikit-learn`：基础机器学习接口\n*   **数据格式要求**：输入数据需为 pandas `DataFrame`，包含目标变量列（`label_value`）、模型得分列（`score`）以及至少一个敏感属性列（需为分类类型 `Categorical`）。\n\n## 安装步骤\n\n您可以使用 pip 直接从 PyPI 安装稳定版，或从 GitHub 安装最新开发版。\n\n**方式一：通过 PyPI 安装（推荐）**\n\n```cmd\npip install aequitas\n```\n\n**方式二：通过 GitHub 安装最新版**\n\n```cmd\npip install git+https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas.git\n```\n\n> **提示**：国内用户若下载缓慢，可添加清华或阿里镜像源加速安装：\n> `pip install aequitas -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n## 基本使用\n\nAequitas 的核心功能主要分为**偏差审计**和**公平性实验**两部分。以下是基于 pandas DataFrame 的最简使用示例。\n\n### 1. 偏差审计 (Bias Auditing)\n\n假设您已有一个包含模型预测结果的 DataFrame `df`，结构如下：\n| label_value | score | sens_attr_1 |\n| :--- | :--- | :--- |\n| 0 | 0.2 | Group_A |\n| 1 | 0.8 | Group_B |\n\n```python\nimport pandas as pd\nfrom aequitas import Audit\n\n# 假设 df 已经加载好，且敏感属性列已转换为 Categorical 类型\n# df['sens_attr_1'] = df['sens_attr_1'].astype('category')\n\n# 初始化审计对象\naudit = Audit(df)\n\n# 生成偏差摘要图，选择关注的公平性指标\n# 常用指标：tpr (真正例率), fpr (假正例率), pprev (阳性预测值)\naudit.summary_plot([\"tpr\", \"fpr\", \"pprev\"])\n\n# 查看特定敏感属性和单一指标的差异图\naudit.disparity_plot(attribute=\"sens_attr_1\", metrics=[\"fpr\"])\n```\n\n### 2. 公平性实验与修正 (Fair ML Experiment)\n\n如果您希望训练新模型或修正现有模型的偏差，可以使用 `aequitas.flow` 模块进行实验。\n\n```python\nfrom aequitas.flow import DefaultExperiment\n\n# dataset 为包含特征、标签和敏感属性的原始数据集 DataFrame\n# target_feature: 标签列名\n# sensitive_feature: 敏感属性列名\n# experiment_size: 实验规模 ('test', 'small', 'medium', 'large')\nexperiment = DefaultExperiment.from_pandas(\n    dataset, \n    target_feature=\"label_value\", \n    sensitive_feature=\"attr\", \n    experiment_size=\"small\"\n)\n\n# 运行实验（自动尝试多种公平性算法）\nexperiment.run()\n\n# 绘制帕累托前沿图，观察准确率与公平性的权衡\nexperiment.plot_pareto()\n```\n\n### 3. 分步方法调用 (进阶)\n\n您也可以手动调用具体的公平性算法（如预处理采样、公平模型训练、后处理阈值调整）：\n\n```python\nfrom aequitas.flow.methods.preprocessing import PrevalenceSampling\nfrom aequitas.flow.methods.inprocessing import FairGBM\nfrom aequitas.flow.methods.postprocessing import BalancedGroupThreshold\n\n# 1. 预处理：平衡各组流行度\nsampler = PrevalenceSampling()\nsampler.fit(dataset.train.X, dataset.train.y, dataset.train.s)\nX_sample, y_sample, s_sample = sampler.transform(dataset.train.X, dataset.train.y, dataset.train.s)\n\n# 2. 处理中：训练公平梯度提升模型\nmodel = FairGBM()\nmodel.fit(X_sample, y_sample, s_sample)\nscores_val = model.predict_proba(dataset.validation.X, dataset.validation.y, dataset.validation.s)\nscores_test = model.predict_proba(dataset.test.X, dataset.test.y, dataset.test.s)\n\n# 3. 后处理：调整阈值以实现群体间的假正例率 (FPR) 平衡\nthreshold = BalancedGroupThreshold(\"top_pct\", 0.1, \"fpr\")\nthreshold.fit(dataset.validation.X, scores_val, dataset.validation.y, dataset.validation.s)\ncorrected_scores = threshold.transform(dataset.test.X, scores_test, dataset.test.s)\n```","某城市司法部门正在评估一套用于预测罪犯再犯风险的机器学习模型，以辅助法官进行量刑参考。\n\n### 没有 aequitas 时\n- **偏见隐蔽难发现**：数据科学家只能依靠简单的整体准确率评估模型，无法察觉模型对特定种族或性别群体存在系统性的误判（如假阳性率过高）。\n- **缺乏量化依据**：面对公众关于“算法歧视”的质疑，团队无法提供具体的公平性指标（如 TPR、FPR 差异）来证明模型的公正性或定位问题源头。\n- **修正成本高昂**：一旦确认存在偏见，开发人员需手动编写复杂的代码来尝试调整阈值或重训练模型，过程繁琐且难以对比不同修正策略的效果。\n- **决策风险不可控**：由于缺乏透明的审计报告，政策制定者不敢贸然部署该模型，担心引发严重的社会伦理争议和法律纠纷。\n\n### 使用 aequitas 后\n- **一键深度审计**：通过输入包含敏感属性的数据框，aequitas 自动生成可视化图表，清晰揭示模型在不同族群间的预测偏差，让隐性偏见无处遁形。\n- **指标透明可解释**：工具提供标准化的公平性度量摘要，团队能迅速用数据回应外界质疑，明确指出是哪些群体受到了不公对待。\n- **高效实验与修正**：利用 aequitas Flow 功能，研究人员可以轻松尝试不同的公平性约束方法或调整分组阈值，快速找到兼顾准确率与公平性的最优解。\n- **合规部署有信心**：生成的详细审计报告为管理层提供了坚实的决策依据，确保模型在符合伦理规范的前提下安全落地应用。\n\naequitas 将抽象的公平性概念转化为可执行、可量化的工程流程，让负责任的 AI 从口号变为现实。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdssg_aequitas_58fcf238.png","dssg","Data Science for Social Good","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fdssg_ac4f9257.jpg","",null,"info@datascienceforsocialgood.org","datascifellows","http:\u002F\u002Fdssgfellowship.org","https:\u002F\u002Fgithub.com\u002Fdssg",[85,89,93,97,101,105,109,113],{"name":86,"color":87,"percentage":88},"Python","#3572A5",73.1,{"name":90,"color":91,"percentage":92},"JavaScript","#f1e05a",14.5,{"name":94,"color":95,"percentage":96},"HTML","#e34c26",5.4,{"name":98,"color":99,"percentage":100},"CSS","#663399",4.1,{"name":102,"color":103,"percentage":104},"SCSS","#c6538c",1.8,{"name":106,"color":107,"percentage":108},"Jupyter Notebook","#DA5B0B",0.7,{"name":110,"color":111,"percentage":112},"Shell","#89e051",0.5,{"name":114,"color":115,"percentage":116},"Dockerfile","#384d54",0,757,123,"2026-03-24T03:34:41","MIT",1,"未说明",{"notes":124,"python":122,"dependencies":125},"该工具主要用于偏差审计和公平机器学习实验，依赖 pandas DataFrame 进行数据处理。支持预处理、处理中和后处理多种公平性算法。可通过 pip 直接安装，未明确提及具体的操作系统、GPU、内存或 Python 版本限制，通常意味着兼容主流 Python 环境。实验规模可配置（test\u002Fsmall\u002Fmedium\u002Flarge），大规模实验可能需要更多计算资源。",[126,127,128,129],"pandas","optuna","lightgbm","fairlearn",[13,54],[132,133,134,135],"fairness","bias","machine-bias","fairness-testing","2026-03-27T02:49:30.150509","2026-04-06T08:44:23.470375",[139,144,149,154,159,164],{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},18115,"get_crosstabs() 函数中的 score_thresholds 参数和分数（score）是如何解释的？为什么我手动计算的 TP\u002FFP\u002FTN\u002FFN 与 Aequitas 的结果相反？","Aequitas 默认将较低的分数视为“预测为正类”（predicted positive），较高的分数视为“预测为负类”。这与许多用户习惯的“高分即正类”直觉相反。\n\n具体来说：\n1. 如果您的原始分数代表“预测正确”的概率（高分=正类），而 label_value=1 代表正类，那么 Aequitas 会将其解释为“预测错误”的概率。\n2. 解决方案是将您的分数转换为 `1 - score`，并将阈值设置为 `1 - original_threshold`。\n3. 或者，您可以调整理解：在 Aequitas 中，分数小于阈值（score \u003C threshold）被视为预测为正类，分数大于等于阈值被视为预测为负类。\n\n例如，如果您原本认为 score >= 0.8 是正类，现在应理解为 score \u003C 0.2 (即 1-0.8) 才是 Aequitas 定义的正类，或者直接使用转换后的分数。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F84",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},18116,"如何消除使用 Aequitas 时出现的 pandas.np 模块弃用警告（FutureWarning）？","该警告是因为代码中使用了已弃用的 `pd.np` 模块。解决方法是更新依赖版本或直接修改代码导入方式。\n\n具体操作：\n1. 不要使用 `pd.np.nan` 或 `pd.np` 其他属性。\n2. 直接导入 numpy 库，将代码中的 `pd.np` 替换为 `np`。\n\n例如，将：\n`divide = lambda x, y: x \u002F y if y != 0 else pd.np.nan`\n修改为：\n`import numpy as np`\n`divide = lambda x, y: x \u002F y if y != 0 else np.nan`\n\n维护者建议更新相关依赖版本以彻底移除此类警告。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F77",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},18117,"如果我只需要使用 Aequitas 的核心功能而不需要 CLI 或 Web 界面，该如何安装以减少依赖（如 Flask, SQLAlchemy）？","您可以通过只安装核心包来避免安装沉重的依赖项（如 Flask 和 SQLAlchemy），这也有助于规避旧版本 Flask 的安全漏洞风险。\n\n推荐方案：\n1. 使用 pip 的 extras 功能，仅安装核心库。\n2. 如果项目支持（参考相关 PR），可以通过 `pip install aequitas` (仅核心) 而不是包含所有可选依赖的版本。\n3. 维护者建议将 webapp 和 cli 作为可选依赖（extras），这样用户可以根据需求选择安装，例如：`pip install aequitas[webapp]` 或仅安装基础包。\n\n这样可以确保只安装必要的组件，减少攻击面并提高运行效率。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F108",{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},18118,"在使用 Aequitas Python API 进行预处理时，文档中的导入语句和属性列类型有什么注意事项？","文档中存在几处需要修正的地方，使用时请注意：\n\n1. **导入语句修正**：预处理函数的正确导入方式是 `from aequitas.preprocessing import preprocess_input_df`。注意 `preprocess_input_df` 是函数名，导入时不应加括号调用。\n2. **属性列类型要求**：虽然文档称属性列可以是分类或连续变量，但在预处理步骤中，**分类列必须转换为字符串类型**。如果您使用 pandas 的 `cut` 函数创建了类别（返回 categorical 数据类型），会导致 `discretize` 清洗函数报错。请先将其转换为 string。\n3. **模块导入缺失**：使用绘图和偏差分析功能时，需显式导入：\n   - `from aequitas.bias import Bias`\n   - `from aequitas.plotting import Plot`\n4. **绘图方法调用**：绘制差异树状图时，若实例化了 `Plot` 对象为 `p`，则应调用 `p.plot_disparity_all(...)` 而非文档中错误的 `aqp.plot_disparity_all(...)`。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F61",{"id":160,"question_zh":161,"answer_zh":162,"source_url":163},18119,"当数据中包含多个 model_id 时，为什么绘制所有差异（plot_disparity_all）会失败？","当偏差数据框（bias df）中存在多个 `model_id` 时，`plot_disparity_all` 方法可能会崩溃，原因是内部函数 `_assemble_ref_groups` 未能正确处理多模型情况。\n\n解决方案与原因：\n1. **根本原因**：`_assemble_ref_groups` 需要为每个 `model_id` 单独创建参考组列表，否则在多模型混合时会出错。\n2. **潜在修复**：检查是否在使用支持多模型的分支（multimodel branch）。\n3. **变通方法**：目前该方法可能缺乏 `model_id` 参数来指定特定模型。建议在调用前过滤数据框，只保留单个 `model_id` 的数据，或者等待官方修复以支持直接传入 `model_id` 参数。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F58",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},18120,"get_crosstabs 函数是否支持同时处理多个模型或多个阈值参数？","`get_crosstabs` 的设计逻辑如下：\n\n1. **模型数量**：该函数每次仅针对 **1 个模型** 运行。它不会自动捕捉多个 `model_id`，而是将所有记录按传入的 `model_id` 或默认 `model_id` (通常为 1) 进行分组。如果需要处理多个模型，需要在外部循环调用该函数，或者未来可能需要专门的 `multimodel_crosstabs` 函数。\n2. **参数（阈值）数量**：该函数可以处理 **1 个或多个阈值参数**。\n   - 如果 `threshold` 参数为 `None`，则运行单个参数。\n   - 如果从配置文件（如 `configs.yaml`）加载了阈值列表，则可以一次性运行多个阈值。\n\n总结：单模型、多阈值是支持的；多模型需要外部循环或额外开发。","https:\u002F\u002Fgithub.com\u002Fdssg\u002Faequitas\u002Fissues\u002F10",[]]