benchmark-reliability 0.2.1__tar.gz → 0.3.1__tar.gz
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.
- benchmark_reliability-0.3.1/MANIFEST.in +13 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/PKG-INFO +16 -12
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/README.md +8 -8
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/pyproject.toml +23 -4
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/setup.py +4 -3
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/PKG-INFO +16 -12
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/SOURCES.txt +37 -1
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/requires.txt +5 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/__init__.py +3 -1
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/analyzer.py +6 -9
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/cli.py +22 -65
- benchmark_reliability-0.3.1/src/brf/registry/manifest.yaml +66 -0
- benchmark_reliability-0.3.1/src/brf/registry/prepare_hashes.json +53 -0
- benchmark_reliability-0.3.1/src/brf/registry/registry_v2.1.json +1634 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/__init__.py +179 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/abalone.py +44 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/air_quality_uci.py +73 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/assistments.py +3 -8
- benchmark_reliability-0.3.1/src/brf/registry/sources/auto_mpg.py +47 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/boston_housing.py +42 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/climate_weather.py +49 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/college_scorecard.py +1 -11
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_aaup.py +0 -1
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_usnews.py +9 -16
- benchmark_reliability-0.3.1/src/brf/registry/sources/cpu_act.py +41 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/credit_card.py +45 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/cross_domain_batch.py +154 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/customer_churn.py +47 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/electricity.py +44 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/energy_building.py +44 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/energy_efficiency.py +42 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/entrance_exam.py +65 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/external_validation.py +180 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/german_credit.py +46 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/higher_ed.py +62 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/kaggle_students_performance.py +53 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/kdd_cup_2010.py +88 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/law_school.py +51 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/mathe.py +0 -1
- benchmark_reliability-0.3.1/src/brf/registry/sources/mm_tba.py +168 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/nursery.py +56 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/oli.py +2 -15
- benchmark_reliability-0.3.1/src/brf/registry/sources/olympics.py +55 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/oulad.py +75 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/pisa2015.py +69 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/pollution.py +42 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/real_estate.py +48 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/seoul_bike.py +43 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/student_absences.py +57 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_depression.py +6 -17
- benchmark_reliability-0.3.1/src/brf/registry/sources/student_dropout.py +55 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/student_health.py +59 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/students_exam_scores.py +62 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/tae.py +0 -1
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/turkiye.py +0 -3
- benchmark_reliability-0.3.1/src/brf/registry/sources/uci_student.py +52 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/uci_student_math.py +58 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/wine_quality.py +54 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/xapi_edu.py +77 -0
- benchmark_reliability-0.3.1/src/brf/registry/sources/yacht.py +42 -0
- benchmark_reliability-0.3.1/src/brf/registry/verify.py +140 -0
- benchmark_reliability-0.3.1/verification/README.md +55 -0
- benchmark_reliability-0.3.1/verification/prepare_verify_py313.txt +55 -0
- benchmark_reliability-0.3.1/verification/prepare_verify_py38.txt +55 -0
- benchmark_reliability-0.3.1/verification/prepare_verify_py38_legacy.txt +112 -0
- benchmark_reliability-0.2.1/src/brf/registry/manifest.yaml +0 -47
- benchmark_reliability-0.2.1/src/brf/registry/sources/__init__.py +0 -216
- benchmark_reliability-0.2.1/src/brf/registry/sources/entrance_exam.py +0 -55
- benchmark_reliability-0.2.1/src/brf/registry/sources/higher_ed.py +0 -53
- benchmark_reliability-0.2.1/src/brf/registry/sources/mm_tba.py +0 -49
- benchmark_reliability-0.2.1/src/brf/registry/sources/oulad.py +0 -52
- benchmark_reliability-0.2.1/src/brf/registry/sources/student_dropout.py +0 -75
- benchmark_reliability-0.2.1/src/brf/registry/sources/uci_student.py +0 -53
- benchmark_reliability-0.2.1/src/brf/registry/sources/xapi_edu.py +0 -51
- benchmark_reliability-0.2.1/src/brf/registry/verify.py +0 -73
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/setup.cfg +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/dependency_links.txt +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/entry_points.txt +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/top_level.txt +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/cli.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/__init__.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/baseline_gap.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/instability.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/metadata.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/null_test.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/__init__.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/classifier.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/embedding.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/visualization.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/__init__.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/__init__.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/json_export.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/latex_export.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_analyzer.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_metrics.py +0 -0
- {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_phase.py +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# verification/ holds the archived output of
|
|
2
|
+
# python scripts/compute_prepare_hashes.py --verify
|
|
3
|
+
# under two interpreters, plus the superseded 3.8 run that motivated the
|
|
4
|
+
# canonical content hash. It is evidence for the prepare-level digests rather
|
|
5
|
+
# than package code, so it lives outside src/brf and is included here rather
|
|
6
|
+
# than via package-data.
|
|
7
|
+
include verification/*.txt
|
|
8
|
+
include verification/*.md
|
|
9
|
+
|
|
10
|
+
# The alternate reference style stays available for reuse of the class file
|
|
11
|
+
# even though the manuscript selects sn-nature.
|
|
12
|
+
include sn-nature.bst
|
|
13
|
+
include sn-mathphys-num.bst
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: benchmark-reliability
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry
|
|
5
5
|
Author-email: zhanglizhuo <zhanglizhuo@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/zhanglizhuo/
|
|
8
|
-
Project-URL: Repository, https://github.com/zhanglizhuo/
|
|
7
|
+
Project-URL: Homepage, https://github.com/zhanglizhuo/BRFPackage
|
|
8
|
+
Project-URL: Repository, https://github.com/zhanglizhuo/BRFPackage
|
|
9
9
|
Keywords: benchmark reliability,dataset auditing,educational AI,machine learning,registry
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -24,6 +24,10 @@ Requires-Dist: matplotlib>=3.5
|
|
|
24
24
|
Requires-Dist: pandas>=1.1
|
|
25
25
|
Requires-Dist: scipy>=1.5
|
|
26
26
|
Requires-Dist: openml>=0.12
|
|
27
|
+
Provides-Extra: full
|
|
28
|
+
Requires-Dist: kagglehub>=0.1; extra == "full"
|
|
29
|
+
Requires-Dist: openpyxl>=3.1; extra == "full"
|
|
30
|
+
Requires-Dist: pyreadstat>=1.2; extra == "full"
|
|
27
31
|
|
|
28
32
|
# benchmark-reliability
|
|
29
33
|
|
|
@@ -65,9 +69,9 @@ print(analyzer.diagnose()["summary"])
|
|
|
65
69
|
for dim, issue in analyzer.diagnose()["details"].items():
|
|
66
70
|
print(f" {dim}: {issue}")
|
|
67
71
|
|
|
68
|
-
# Percentile rank against
|
|
72
|
+
# Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
|
|
69
73
|
print(analyzer.rank())
|
|
70
|
-
# {'S_percentile':
|
|
74
|
+
# {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
|
|
71
75
|
|
|
72
76
|
# One-paragraph recommendation
|
|
73
77
|
print(analyzer.recommend())
|
|
@@ -77,7 +81,7 @@ print(analyzer.recommend())
|
|
|
77
81
|
|
|
78
82
|
```bash
|
|
79
83
|
$ brf registry list
|
|
80
|
-
BRF Registry
|
|
84
|
+
BRF Registry
|
|
81
85
|
|
|
82
86
|
assistments ASSISTments 2009-2010 N= 3729 G= 124
|
|
83
87
|
college_scorecard US College Scorecard N= 7804 G= 59
|
|
@@ -95,7 +99,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
|
|
|
95
99
|
### Download and verify all datasets
|
|
96
100
|
|
|
97
101
|
```bash
|
|
98
|
-
$ brf registry sync # download + SHA-256 verify all
|
|
102
|
+
$ brf registry sync # download + SHA-256 verify all
|
|
99
103
|
$ brf registry info oulad
|
|
100
104
|
name: oulad
|
|
101
105
|
display_name: Open University Learning Analytics Dataset
|
|
@@ -122,7 +126,7 @@ communication shorthand only --- **the signal is in the continuous values**.
|
|
|
122
126
|
|
|
123
127
|
Use `analyzer.diagnose()` for per-dimension explanations and actionable
|
|
124
128
|
recommendations, or `analyzer.rank()` to see percentile scores against
|
|
125
|
-
the
|
|
129
|
+
the 51 benchmarks in the BRF Registry (v2.1 reference).
|
|
126
130
|
|
|
127
131
|
## CLI Reference
|
|
128
132
|
|
|
@@ -152,8 +156,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
|
|
|
152
156
|
@software{zhang2026brf,
|
|
153
157
|
author = {Lizhuo Zhang},
|
|
154
158
|
title = {benchmark-reliability: Benchmark Reliability Framework},
|
|
155
|
-
url = {https://github.com/zhanglizhuo/
|
|
156
|
-
version = {0.
|
|
159
|
+
url = {https://github.com/zhanglizhuo/BRFPackage},
|
|
160
|
+
version = {0.3.0},
|
|
157
161
|
year = {2026},
|
|
158
162
|
}
|
|
159
163
|
```
|
|
@@ -162,7 +166,7 @@ The behavior audit protocol is described in:
|
|
|
162
166
|
|
|
163
167
|
> Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
|
|
164
168
|
> benchmark reliability under group-aware evaluation.*
|
|
165
|
-
> Scientific Reports (
|
|
169
|
+
> Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
|
|
166
170
|
|
|
167
171
|
## Related Work
|
|
168
172
|
|
|
@@ -38,9 +38,9 @@ print(analyzer.diagnose()["summary"])
|
|
|
38
38
|
for dim, issue in analyzer.diagnose()["details"].items():
|
|
39
39
|
print(f" {dim}: {issue}")
|
|
40
40
|
|
|
41
|
-
# Percentile rank against
|
|
41
|
+
# Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
|
|
42
42
|
print(analyzer.rank())
|
|
43
|
-
# {'S_percentile':
|
|
43
|
+
# {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
|
|
44
44
|
|
|
45
45
|
# One-paragraph recommendation
|
|
46
46
|
print(analyzer.recommend())
|
|
@@ -50,7 +50,7 @@ print(analyzer.recommend())
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
$ brf registry list
|
|
53
|
-
BRF Registry
|
|
53
|
+
BRF Registry
|
|
54
54
|
|
|
55
55
|
assistments ASSISTments 2009-2010 N= 3729 G= 124
|
|
56
56
|
college_scorecard US College Scorecard N= 7804 G= 59
|
|
@@ -68,7 +68,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
|
|
|
68
68
|
### Download and verify all datasets
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
$ brf registry sync # download + SHA-256 verify all
|
|
71
|
+
$ brf registry sync # download + SHA-256 verify all
|
|
72
72
|
$ brf registry info oulad
|
|
73
73
|
name: oulad
|
|
74
74
|
display_name: Open University Learning Analytics Dataset
|
|
@@ -95,7 +95,7 @@ communication shorthand only --- **the signal is in the continuous values**.
|
|
|
95
95
|
|
|
96
96
|
Use `analyzer.diagnose()` for per-dimension explanations and actionable
|
|
97
97
|
recommendations, or `analyzer.rank()` to see percentile scores against
|
|
98
|
-
the
|
|
98
|
+
the 51 benchmarks in the BRF Registry (v2.1 reference).
|
|
99
99
|
|
|
100
100
|
## CLI Reference
|
|
101
101
|
|
|
@@ -125,8 +125,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
|
|
|
125
125
|
@software{zhang2026brf,
|
|
126
126
|
author = {Lizhuo Zhang},
|
|
127
127
|
title = {benchmark-reliability: Benchmark Reliability Framework},
|
|
128
|
-
url = {https://github.com/zhanglizhuo/
|
|
129
|
-
version = {0.
|
|
128
|
+
url = {https://github.com/zhanglizhuo/BRFPackage},
|
|
129
|
+
version = {0.3.0},
|
|
130
130
|
year = {2026},
|
|
131
131
|
}
|
|
132
132
|
```
|
|
@@ -135,7 +135,7 @@ The behavior audit protocol is described in:
|
|
|
135
135
|
|
|
136
136
|
> Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
|
|
137
137
|
> benchmark reliability under group-aware evaluation.*
|
|
138
|
-
> Scientific Reports (
|
|
138
|
+
> Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
|
|
139
139
|
|
|
140
140
|
## Related Work
|
|
141
141
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "benchmark-reliability"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.1"
|
|
8
8
|
description = "Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -33,18 +33,37 @@ dependencies = [
|
|
|
33
33
|
"openml>=0.12",
|
|
34
34
|
]
|
|
35
35
|
|
|
36
|
+
# Seven of the 51 datasets need a reader that is not part of the core stack:
|
|
37
|
+
# kagglehub for 5 Kaggle-hosted sources, pyreadstat for the PISA 2015 .sav
|
|
38
|
+
# files, openpyxl for the Taiwan .xlsx files. They are optional rather than
|
|
39
|
+
# required because pyreadstat needs the system-level libreadstat, which would
|
|
40
|
+
# otherwise be imposed on every install for the sake of 44 datasets.
|
|
41
|
+
# pyreadstat also needs libreadstat present on the system, e.g.
|
|
42
|
+
# Debian/Ubuntu: apt-get install libreadstat-dev
|
|
43
|
+
# macOS: brew install readstat
|
|
44
|
+
[project.optional-dependencies]
|
|
45
|
+
full = [
|
|
46
|
+
"kagglehub>=0.1",
|
|
47
|
+
"openpyxl>=3.1",
|
|
48
|
+
"pyreadstat>=1.2",
|
|
49
|
+
]
|
|
50
|
+
|
|
36
51
|
[project.scripts]
|
|
37
52
|
brf = "brf.cli:main"
|
|
38
53
|
|
|
39
54
|
[project.urls]
|
|
40
|
-
Homepage = "https://github.com/zhanglizhuo/
|
|
41
|
-
Repository = "https://github.com/zhanglizhuo/
|
|
55
|
+
Homepage = "https://github.com/zhanglizhuo/BRFPackage"
|
|
56
|
+
Repository = "https://github.com/zhanglizhuo/BRFPackage"
|
|
42
57
|
|
|
43
58
|
[tool.setuptools]
|
|
44
59
|
license-files = []
|
|
45
60
|
|
|
46
61
|
[tool.setuptools.packages.find]
|
|
47
62
|
where = ["src"]
|
|
63
|
+
include = ["brf", "brf.metrics", "brf.phase", "brf.registry", "brf.registry.sources", "brf.report"]
|
|
48
64
|
|
|
49
65
|
[tool.setuptools.package-data]
|
|
50
|
-
"brf.registry" = ["manifest.yaml"]
|
|
66
|
+
"brf.registry" = ["manifest.yaml", "registry_v2.1.json", "prepare_hashes.json"]
|
|
67
|
+
|
|
68
|
+
[tool.setuptools.exclude-package-data]
|
|
69
|
+
"brf.registry" = ["cache/*", "cache/**/*"]
|
|
@@ -2,15 +2,16 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="benchmark-reliability",
|
|
5
|
-
version="0.
|
|
5
|
+
version="0.3.0",
|
|
6
6
|
packages=find_packages(where="src"),
|
|
7
7
|
package_dir={"": "src"},
|
|
8
8
|
package_data={
|
|
9
9
|
"brf.registry": ["manifest.yaml"],
|
|
10
10
|
},
|
|
11
11
|
install_requires=[
|
|
12
|
-
"numpy>=1.
|
|
13
|
-
"scikit-learn>=0
|
|
12
|
+
"numpy>=1.21",
|
|
13
|
+
"scikit-learn>=1.0",
|
|
14
|
+
"matplotlib>=3.5",
|
|
14
15
|
"pandas>=1.1",
|
|
15
16
|
"scipy>=1.5",
|
|
16
17
|
"openml>=0.12",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: benchmark-reliability
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry
|
|
5
5
|
Author-email: zhanglizhuo <zhanglizhuo@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/zhanglizhuo/
|
|
8
|
-
Project-URL: Repository, https://github.com/zhanglizhuo/
|
|
7
|
+
Project-URL: Homepage, https://github.com/zhanglizhuo/BRFPackage
|
|
8
|
+
Project-URL: Repository, https://github.com/zhanglizhuo/BRFPackage
|
|
9
9
|
Keywords: benchmark reliability,dataset auditing,educational AI,machine learning,registry
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -24,6 +24,10 @@ Requires-Dist: matplotlib>=3.5
|
|
|
24
24
|
Requires-Dist: pandas>=1.1
|
|
25
25
|
Requires-Dist: scipy>=1.5
|
|
26
26
|
Requires-Dist: openml>=0.12
|
|
27
|
+
Provides-Extra: full
|
|
28
|
+
Requires-Dist: kagglehub>=0.1; extra == "full"
|
|
29
|
+
Requires-Dist: openpyxl>=3.1; extra == "full"
|
|
30
|
+
Requires-Dist: pyreadstat>=1.2; extra == "full"
|
|
27
31
|
|
|
28
32
|
# benchmark-reliability
|
|
29
33
|
|
|
@@ -65,9 +69,9 @@ print(analyzer.diagnose()["summary"])
|
|
|
65
69
|
for dim, issue in analyzer.diagnose()["details"].items():
|
|
66
70
|
print(f" {dim}: {issue}")
|
|
67
71
|
|
|
68
|
-
# Percentile rank against
|
|
72
|
+
# Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
|
|
69
73
|
print(analyzer.rank())
|
|
70
|
-
# {'S_percentile':
|
|
74
|
+
# {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
|
|
71
75
|
|
|
72
76
|
# One-paragraph recommendation
|
|
73
77
|
print(analyzer.recommend())
|
|
@@ -77,7 +81,7 @@ print(analyzer.recommend())
|
|
|
77
81
|
|
|
78
82
|
```bash
|
|
79
83
|
$ brf registry list
|
|
80
|
-
BRF Registry
|
|
84
|
+
BRF Registry
|
|
81
85
|
|
|
82
86
|
assistments ASSISTments 2009-2010 N= 3729 G= 124
|
|
83
87
|
college_scorecard US College Scorecard N= 7804 G= 59
|
|
@@ -95,7 +99,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
|
|
|
95
99
|
### Download and verify all datasets
|
|
96
100
|
|
|
97
101
|
```bash
|
|
98
|
-
$ brf registry sync # download + SHA-256 verify all
|
|
102
|
+
$ brf registry sync # download + SHA-256 verify all
|
|
99
103
|
$ brf registry info oulad
|
|
100
104
|
name: oulad
|
|
101
105
|
display_name: Open University Learning Analytics Dataset
|
|
@@ -122,7 +126,7 @@ communication shorthand only --- **the signal is in the continuous values**.
|
|
|
122
126
|
|
|
123
127
|
Use `analyzer.diagnose()` for per-dimension explanations and actionable
|
|
124
128
|
recommendations, or `analyzer.rank()` to see percentile scores against
|
|
125
|
-
the
|
|
129
|
+
the 51 benchmarks in the BRF Registry (v2.1 reference).
|
|
126
130
|
|
|
127
131
|
## CLI Reference
|
|
128
132
|
|
|
@@ -152,8 +156,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
|
|
|
152
156
|
@software{zhang2026brf,
|
|
153
157
|
author = {Lizhuo Zhang},
|
|
154
158
|
title = {benchmark-reliability: Benchmark Reliability Framework},
|
|
155
|
-
url = {https://github.com/zhanglizhuo/
|
|
156
|
-
version = {0.
|
|
159
|
+
url = {https://github.com/zhanglizhuo/BRFPackage},
|
|
160
|
+
version = {0.3.0},
|
|
157
161
|
year = {2026},
|
|
158
162
|
}
|
|
159
163
|
```
|
|
@@ -162,7 +166,7 @@ The behavior audit protocol is described in:
|
|
|
162
166
|
|
|
163
167
|
> Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
|
|
164
168
|
> benchmark reliability under group-aware evaluation.*
|
|
165
|
-
> Scientific Reports (
|
|
169
|
+
> Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
|
|
166
170
|
|
|
167
171
|
## Related Work
|
|
168
172
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
MANIFEST.in
|
|
1
2
|
README.md
|
|
2
3
|
pyproject.toml
|
|
3
4
|
setup.py
|
|
@@ -22,27 +23,62 @@ src/brf/phase/visualization.py
|
|
|
22
23
|
src/brf/registry/__init__.py
|
|
23
24
|
src/brf/registry/cli.py
|
|
24
25
|
src/brf/registry/manifest.yaml
|
|
26
|
+
src/brf/registry/prepare_hashes.json
|
|
27
|
+
src/brf/registry/registry_v2.1.json
|
|
25
28
|
src/brf/registry/verify.py
|
|
26
29
|
src/brf/registry/sources/__init__.py
|
|
30
|
+
src/brf/registry/sources/abalone.py
|
|
31
|
+
src/brf/registry/sources/air_quality_uci.py
|
|
27
32
|
src/brf/registry/sources/assistments.py
|
|
33
|
+
src/brf/registry/sources/auto_mpg.py
|
|
34
|
+
src/brf/registry/sources/boston_housing.py
|
|
35
|
+
src/brf/registry/sources/climate_weather.py
|
|
28
36
|
src/brf/registry/sources/college_scorecard.py
|
|
29
37
|
src/brf/registry/sources/colleges_aaup.py
|
|
30
38
|
src/brf/registry/sources/colleges_usnews.py
|
|
39
|
+
src/brf/registry/sources/cpu_act.py
|
|
40
|
+
src/brf/registry/sources/credit_card.py
|
|
41
|
+
src/brf/registry/sources/cross_domain_batch.py
|
|
42
|
+
src/brf/registry/sources/customer_churn.py
|
|
43
|
+
src/brf/registry/sources/electricity.py
|
|
44
|
+
src/brf/registry/sources/energy_building.py
|
|
45
|
+
src/brf/registry/sources/energy_efficiency.py
|
|
31
46
|
src/brf/registry/sources/entrance_exam.py
|
|
47
|
+
src/brf/registry/sources/external_validation.py
|
|
48
|
+
src/brf/registry/sources/german_credit.py
|
|
32
49
|
src/brf/registry/sources/higher_ed.py
|
|
50
|
+
src/brf/registry/sources/kaggle_students_performance.py
|
|
51
|
+
src/brf/registry/sources/kdd_cup_2010.py
|
|
52
|
+
src/brf/registry/sources/law_school.py
|
|
33
53
|
src/brf/registry/sources/mathe.py
|
|
34
54
|
src/brf/registry/sources/mm_tba.py
|
|
55
|
+
src/brf/registry/sources/nursery.py
|
|
35
56
|
src/brf/registry/sources/oli.py
|
|
57
|
+
src/brf/registry/sources/olympics.py
|
|
36
58
|
src/brf/registry/sources/oulad.py
|
|
59
|
+
src/brf/registry/sources/pisa2015.py
|
|
60
|
+
src/brf/registry/sources/pollution.py
|
|
61
|
+
src/brf/registry/sources/real_estate.py
|
|
62
|
+
src/brf/registry/sources/seoul_bike.py
|
|
63
|
+
src/brf/registry/sources/student_absences.py
|
|
37
64
|
src/brf/registry/sources/student_depression.py
|
|
38
65
|
src/brf/registry/sources/student_dropout.py
|
|
66
|
+
src/brf/registry/sources/student_health.py
|
|
67
|
+
src/brf/registry/sources/students_exam_scores.py
|
|
39
68
|
src/brf/registry/sources/tae.py
|
|
40
69
|
src/brf/registry/sources/turkiye.py
|
|
41
70
|
src/brf/registry/sources/uci_student.py
|
|
71
|
+
src/brf/registry/sources/uci_student_math.py
|
|
72
|
+
src/brf/registry/sources/wine_quality.py
|
|
42
73
|
src/brf/registry/sources/xapi_edu.py
|
|
74
|
+
src/brf/registry/sources/yacht.py
|
|
43
75
|
src/brf/report/__init__.py
|
|
44
76
|
src/brf/report/json_export.py
|
|
45
77
|
src/brf/report/latex_export.py
|
|
46
78
|
tests/test_analyzer.py
|
|
47
79
|
tests/test_metrics.py
|
|
48
|
-
tests/test_phase.py
|
|
80
|
+
tests/test_phase.py
|
|
81
|
+
verification/README.md
|
|
82
|
+
verification/prepare_verify_py313.txt
|
|
83
|
+
verification/prepare_verify_py38.txt
|
|
84
|
+
verification/prepare_verify_py38_legacy.txt
|
|
@@ -27,7 +27,7 @@ class BRFAnalyzer:
|
|
|
27
27
|
raise ValueError("n_splits must be >= 2")
|
|
28
28
|
self.n_splits = n_splits
|
|
29
29
|
self.n_permutations = n_permutations
|
|
30
|
-
self.model = model
|
|
30
|
+
self.model = model if model is not None else Ridge(alpha=1.0)
|
|
31
31
|
self.seed = seed
|
|
32
32
|
self.scale = scale
|
|
33
33
|
|
|
@@ -251,10 +251,10 @@ class BRFAnalyzer:
|
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
def rank(self) -> Dict[str, float]:
|
|
254
|
-
"""Percentile rank of S and E against the BRF Registry
|
|
254
|
+
"""Percentile rank of S and E against the BRF Registry v2.1 benchmarks.
|
|
255
255
|
|
|
256
256
|
Returns percentiles (0-100) indicating where this dataset's S and E
|
|
257
|
-
fall relative to the
|
|
257
|
+
fall relative to the audited benchmarks in the bundled Registry reference (v2.1). Requires
|
|
258
258
|
data to be accessible.
|
|
259
259
|
"""
|
|
260
260
|
if not self._fitted:
|
|
@@ -273,7 +273,7 @@ class BRFAnalyzer:
|
|
|
273
273
|
return {
|
|
274
274
|
"S_percentile": round(pctile(s_vals, self.S), 1),
|
|
275
275
|
"E_percentile": round(pctile(e_vals, self.E), 1),
|
|
276
|
-
"reference": f"BRF Registry
|
|
276
|
+
"reference": f"BRF Registry v2.1 ({len(s_vals)} benchmarks)",
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
def recommend(self, n_samples: Optional[int] = None,
|
|
@@ -316,12 +316,9 @@ class BRFAnalyzer:
|
|
|
316
316
|
"""Load Registry reference data for percentile ranking."""
|
|
317
317
|
if self._registry_ref is not None:
|
|
318
318
|
return self._registry_ref
|
|
319
|
-
#
|
|
319
|
+
# Bundled registry reference (ships with the package at brf/registry/)
|
|
320
320
|
candidates = [
|
|
321
|
-
Path(__file__).parent.
|
|
322
|
-
/ "BRFRegistry" / "results" / "registry_v1.5.json",
|
|
323
|
-
Path(__file__).parent.parent.parent
|
|
324
|
-
/ "BRFRegistry" / "results" / "registry_v1.5.json",
|
|
321
|
+
Path(__file__).parent / "registry" / "registry_v2.1.json",
|
|
325
322
|
]
|
|
326
323
|
for p in candidates:
|
|
327
324
|
if p.exists():
|
|
@@ -1,38 +1,11 @@
|
|
|
1
|
-
"""BRF Registry CLI -- download, verify, and prepare datasets.
|
|
2
|
-
|
|
3
|
-
Usage::
|
|
4
|
-
|
|
5
|
-
# List all datasets
|
|
6
|
-
python -m registry.cli list
|
|
7
|
-
|
|
8
|
-
# Download a dataset (with verification)
|
|
9
|
-
python -m registry.cli download tae
|
|
10
|
-
python -m registry.cli download --all
|
|
11
|
-
|
|
12
|
-
# Verify checksums
|
|
13
|
-
python -m registry.cli verify tae
|
|
14
|
-
python -m registry.cli verify --all
|
|
15
|
-
|
|
16
|
-
# Sync (download + verify all)
|
|
17
|
-
python -m registry.cli sync
|
|
18
|
-
|
|
19
|
-
# Show metadata
|
|
20
|
-
python -m registry.cli info tae
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
from __future__ import annotations
|
|
24
|
-
|
|
25
1
|
import argparse
|
|
26
2
|
from pathlib import Path
|
|
27
3
|
|
|
28
|
-
import sys
|
|
29
|
-
|
|
30
4
|
from .sources import REGISTRY_SOURCES, list_sources
|
|
31
5
|
from .verify import verify_dataset, verify_all
|
|
32
6
|
|
|
33
7
|
|
|
34
8
|
def cmd_list():
|
|
35
|
-
"""List all registered datasets."""
|
|
36
9
|
print(f"BRF Registry -- {len(list_sources())} datasets\n")
|
|
37
10
|
for key in list_sources():
|
|
38
11
|
source = REGISTRY_SOURCES[key]
|
|
@@ -40,16 +13,11 @@ def cmd_list():
|
|
|
40
13
|
f"N={source.n_samples:>5d} G={source.n_groups:>4d}")
|
|
41
14
|
|
|
42
15
|
|
|
43
|
-
def cmd_download(key
|
|
44
|
-
|
|
45
|
-
if
|
|
46
|
-
keys = list_sources()
|
|
47
|
-
elif key:
|
|
48
|
-
keys = [key]
|
|
49
|
-
else:
|
|
16
|
+
def cmd_download(key=None, all_=False):
|
|
17
|
+
keys = list_sources() if all_ else ([key] if key else [])
|
|
18
|
+
if not keys:
|
|
50
19
|
print("Usage: download <key> or download --all")
|
|
51
20
|
return
|
|
52
|
-
|
|
53
21
|
for k in keys:
|
|
54
22
|
source = REGISTRY_SOURCES.get(k)
|
|
55
23
|
if source is None:
|
|
@@ -59,17 +27,14 @@ def cmd_download(key: str = None, all_: bool = False):
|
|
|
59
27
|
try:
|
|
60
28
|
path = source.download()
|
|
61
29
|
print(f" -> {path}")
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
ok = source._check_sha256(path) if isinstance(path, Path) else True
|
|
65
|
-
if not ok:
|
|
30
|
+
if source.sha256 and isinstance(path, Path):
|
|
31
|
+
if not source._check_sha256(path):
|
|
66
32
|
print(f" WARNING: SHA-256 mismatch!")
|
|
67
33
|
except Exception as e:
|
|
68
34
|
print(f" FAILED: {e}")
|
|
69
35
|
|
|
70
36
|
|
|
71
|
-
def cmd_verify(key
|
|
72
|
-
"""Verify dataset checksums."""
|
|
37
|
+
def cmd_verify(key=None, all_=False):
|
|
73
38
|
if all_:
|
|
74
39
|
verify_all()
|
|
75
40
|
elif key:
|
|
@@ -79,7 +44,6 @@ def cmd_verify(key: str = None, all_: bool = False):
|
|
|
79
44
|
|
|
80
45
|
|
|
81
46
|
def cmd_sync():
|
|
82
|
-
"""Download + verify all datasets."""
|
|
83
47
|
print("Syncing all datasets...")
|
|
84
48
|
for key in list_sources():
|
|
85
49
|
source = REGISTRY_SOURCES[key]
|
|
@@ -87,45 +51,38 @@ def cmd_sync():
|
|
|
87
51
|
try:
|
|
88
52
|
path = source.download()
|
|
89
53
|
print(f" Downloaded to {path}")
|
|
90
|
-
if source.sha256:
|
|
91
|
-
ok = source._check_sha256(path)
|
|
54
|
+
if source.sha256 and isinstance(path, Path):
|
|
55
|
+
ok = source._check_sha256(path)
|
|
92
56
|
print(f" Checksum: {'OK' if ok else 'FAIL'}")
|
|
93
57
|
except Exception as e:
|
|
94
58
|
print(f" FAILED: {e}")
|
|
95
59
|
|
|
96
60
|
|
|
97
|
-
def cmd_info(key
|
|
98
|
-
"""Show dataset metadata."""
|
|
61
|
+
def cmd_info(key):
|
|
99
62
|
source = REGISTRY_SOURCES.get(key)
|
|
100
63
|
if source is None:
|
|
101
64
|
print(f"Unknown dataset: {key}")
|
|
102
65
|
return
|
|
103
|
-
|
|
104
|
-
for k, v in meta.items():
|
|
66
|
+
for k, v in source.metadata().items():
|
|
105
67
|
print(f" {k}: {v}")
|
|
106
68
|
|
|
107
69
|
|
|
108
70
|
def main():
|
|
109
71
|
parser = argparse.ArgumentParser(description="BRF Registry CLI")
|
|
110
|
-
sub = parser.add_subparsers(dest="command"
|
|
111
|
-
|
|
112
|
-
sub.add_parser("list"
|
|
113
|
-
|
|
114
|
-
dl
|
|
115
|
-
dl.add_argument("
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
vf
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
sub.add_parser("sync", help="Download + verify all datasets")
|
|
123
|
-
|
|
124
|
-
info = sub.add_parser("info", help="Show dataset metadata")
|
|
125
|
-
info.add_argument("key", help="Dataset key")
|
|
72
|
+
sub = parser.add_subparsers(dest="command")
|
|
73
|
+
|
|
74
|
+
sub.add_parser("list")
|
|
75
|
+
dl = sub.add_parser("download")
|
|
76
|
+
dl.add_argument("key", nargs="?")
|
|
77
|
+
dl.add_argument("--all", action="store_true")
|
|
78
|
+
vf = sub.add_parser("verify")
|
|
79
|
+
vf.add_argument("key", nargs="?")
|
|
80
|
+
vf.add_argument("--all", action="store_true")
|
|
81
|
+
sub.add_parser("sync")
|
|
82
|
+
info = sub.add_parser("info")
|
|
83
|
+
info.add_argument("key")
|
|
126
84
|
|
|
127
85
|
args = parser.parse_args()
|
|
128
|
-
|
|
129
86
|
if args.command == "list":
|
|
130
87
|
cmd_list()
|
|
131
88
|
elif args.command == "download":
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
brf_results:
|
|
2
|
+
fragile: 0
|
|
3
|
+
reliable: 42
|
|
4
|
+
void: 9
|
|
5
|
+
datasets:
|
|
6
|
+
- abalone
|
|
7
|
+
- air_quality
|
|
8
|
+
- airfoil
|
|
9
|
+
- assistments
|
|
10
|
+
- auto_mpg
|
|
11
|
+
- bike_sharing
|
|
12
|
+
- boston_housing
|
|
13
|
+
- breast_cancer
|
|
14
|
+
- california_housing
|
|
15
|
+
- ccpp
|
|
16
|
+
- college_scorecard
|
|
17
|
+
- colleges_aaup
|
|
18
|
+
- colleges_usnews
|
|
19
|
+
- concrete
|
|
20
|
+
- cpu_act
|
|
21
|
+
- credit_card
|
|
22
|
+
- customer_churn
|
|
23
|
+
- diabetes
|
|
24
|
+
- energy_building
|
|
25
|
+
- energy_efficiency
|
|
26
|
+
- entrance_exam
|
|
27
|
+
- german_credit
|
|
28
|
+
- higher_ed
|
|
29
|
+
- kaggle_students_performance
|
|
30
|
+
- kdd_cup_2010
|
|
31
|
+
- law_school
|
|
32
|
+
- linnerud
|
|
33
|
+
- mathe
|
|
34
|
+
- mm_tba
|
|
35
|
+
- nursery
|
|
36
|
+
- oli
|
|
37
|
+
- oulad
|
|
38
|
+
- pisa2015
|
|
39
|
+
- pollution
|
|
40
|
+
- real_estate
|
|
41
|
+
- climate_weather
|
|
42
|
+
- seoul_bike
|
|
43
|
+
- olympics
|
|
44
|
+
- student_absences
|
|
45
|
+
- student_depression
|
|
46
|
+
- student_dropout
|
|
47
|
+
- student_health
|
|
48
|
+
- students_exam_scores
|
|
49
|
+
- electricity
|
|
50
|
+
- tae
|
|
51
|
+
- turkiye
|
|
52
|
+
- uci_student
|
|
53
|
+
- uci_student_math
|
|
54
|
+
- wine_quality
|
|
55
|
+
- xapi_edu
|
|
56
|
+
- yacht
|
|
57
|
+
description: 'Curated collection of group-aware benchmark datasets across education,
|
|
58
|
+
engineering, transportation, energy, healthcare, finance, environmental, business,
|
|
59
|
+
sports, and fitness domains with standardized metadata, reproducibility scripts,
|
|
60
|
+
and BRF (Benchmark Reliability Framework) audit results. v2.1 expands from 35 to
|
|
61
|
+
51 datasets. All source modules are self-contained.
|
|
62
|
+
|
|
63
|
+
'
|
|
64
|
+
release_date: '2026-09-10'
|
|
65
|
+
total_datasets: 51
|
|
66
|
+
version: '2.1'
|