feat: 因子引擎字段验证改进、股票池过滤修复及实验模块增强

1. 因子引擎字段验证改进
   - 新增 SchemaCache.get_all_fields() 方法,返回所有可用字段集合
   - 修改 match_fields_to_tables(),对不存在的字段抛出明确错误
   - 错误信息包含可用字段列表提示,帮助用户检查拼写
2. 股票池过滤修复
   - 修复北交所股票排除逻辑:将识别方式从代码前缀(8/4开头)改为.BJ后缀
   - 更新文档注释,明确北交所股票识别规则
3. 实验模块增强
   - 新增 regression.py 实现回归实验逻辑
   - 新增 output/ 目录存放实验输出结果
This commit is contained in:
2026-03-03 23:51:08 +08:00
parent 192718095f
commit f1687dadf3
4 changed files with 1694 additions and 7 deletions

View File

@@ -179,6 +179,17 @@ class SchemaCache:
return False
return field_name in self._field_to_table_map
def get_all_fields(self) -> Set[str]:
"""获取所有可用字段的集合。
Returns:
所有可用字段名的集合
"""
self._ensure_scanned()
if self._field_to_table_map is None:
return set()
return set(self._field_to_table_map.keys())
def match_fields_to_tables(self, field_names: Set[str]) -> Dict[str, List[str]]:
"""将字段集合按表分组。
@@ -199,10 +210,13 @@ class SchemaCache:
table_to_fields[table] = []
table_to_fields[table].append(field)
else:
# 字段不存在于任何表,归入 "daily" 表(默认表)
if "daily" not in table_to_fields:
table_to_fields["daily"] = []
table_to_fields["daily"].append(field)
# 字段不存在于任何表,报错
available_fields = self.get_all_fields()
raise ValueError(
f"字段 '{field}' 不存在于数据库的任何表中。\n"
f"可用字段: {sorted(available_fields)[:20]}...\n"
f"请检查字段名拼写或同步相关数据表。"
)
# 对字段列表排序以保持确定性输出
for fields in table_to_fields.values():