Skip to main content

FitCheck

Zero-boilerplate ML data validation, model evaluation, and drift detection.

CI Python 3.10+ Apache 2.0 Tests

FitCheck is a local-first toolkit for answering three questions quickly: Is this dataset healthy? Is this model behaving? Has production data changed? Every workflow produces a self-contained HTML report that can be opened locally and shared in a pull request, Slack, or an incident review.

Why FitCheck

FitCheck is intentionally opinionated. It is zero-config for the common path, never mutates data silently, makes recommendations understandable to beginners, and keeps advanced diagnostics available without making the first command complicated. It does not send telemetry or require a hosted service.

Principle What it means in practice
Zero friction Pass a CSV, Parquet file, DataFrame, or trained model and receive a report.
Read-only by default Checks diagnose problems; optional fix scripts are generated separately for inspection.
Local and private Reports and statistical calculations run locally.
Progressive disclosure The simple API remains small while full workflows expose deeper diagnostics.
Shareable output Reports are standalone HTML with responsive styling and embedded plots.

Installation

The repository is currently the canonical install source. Use this command today:

python -m pip install "git+https://github.com/neoline361-art/fitcheck.git"

If the package is published to PyPI in the future, the shorter form will be:

python -m pip install data-fitcheck

For development:

git clone https://github.com/neoline361-art/fitcheck.git
cd fitcheck
python -m pip install -e ".[dev]"

The one-command workflow

fitcheck full data.csv \
  --target label \
  --model model.joblib \
  --reference train.csv \
  --auto-fix \
  --output-dir fitcheck_reports

This creates a dataset report, model evaluation report, optional drift report, and—when issues are found—a transparent fix script. The workflow uses the dataset columns other than label as model features, so it is best suited to a model trained on the same feature schema.

Python API

import fitcheck

issues = fitcheck.check("data.csv", target="label")
metrics = fitcheck.report(model, X_test, y_test)
results = fitcheck.detect_drift("train.csv", "production.csv", method="auto")

The dataset check accepts threshold overrides without requiring a configuration file:

fitcheck.check(
    "data.csv",
    target="label",
    config={
        "missing_warning": 0.05,
        "missing_critical": 0.20,
        "outlier_threshold": 0.01,
    },
)

What FitCheck checks

Area Built-in diagnostics
Dataset health Missing values, duplicates, constants, class imbalance, and IQR outliers
Model classification Accuracy, precision, recall, F1, confusion matrix, ROC/AUC, average precision, precision–recall curve, recommended threshold, and tree feature importance
Model regression MSE, RMSE, MAE, R², residual analysis, actual-versus-predicted plot, and tree feature importance
Drift Automatic KS/PSI selection for numeric data, explicit Wasserstein distance, and Chi-squared categorical comparisons
Reports Severity badges, recommendations, responsive tables, embedded plots, and no external assets

For drift, method="auto" uses KS on smaller numeric samples and PSI on larger numeric samples. Use method="wasserstein" when a normalized distribution-distance signal is more useful than a hypothesis test.

CLI commands

fitcheck check data.csv --target label
fitcheck check data.csv --missing-warning 0.10 --missing-critical 0.30
fitcheck report model.joblib X_test.npy y_test.npy
fitcheck drift train.csv production.csv --method psi
fitcheck demo

Reports and privacy

FitCheck does not upload input data. HTML reports embed generated plots as base64 data and include only the information derived from the supplied datasets. Model loading uses Python pickle for user-owned artifacts; never load a model file from an untrusted source.

Development and verification

pip install -e ".[dev]"
ruff check fitcheck tests
mypy fitcheck
bandit -r fitcheck/ -x tests
pytest --cov=fitcheck --cov-report=term-missing

The current repository suite contains 44 passing tests and reports approximately 95% total coverage on the supported Python environment.

Large CSVs and contact data

Phone numbers should be stored as strings, not numeric values, so leading zeros and country prefixes are preserved. Names are treated as text values. A quick local check is:

fitcheck check contacts.csv --output contacts_report.html
# Fast, explicit sample review for a very large CSV:
fitcheck check contacts.csv --sample-rows 100000 --output contacts_sample_report.html

FitCheck is designed for in-memory pandas workflows. A file with 1 million rows and a few narrow columns is a reasonable local smoke-test target, but a 10-million-row file may require several gigabytes of RAM depending on string length and pandas version. For a fast schema/sample review, use pandas to create a representative sample before calling FitCheck; do not claim a sample report is a full-dataset audit. FitCheck does not print or transmit raw phone numbers in the terminal, but generated reports can contain previews, so protect report files as sensitive data.

Documentation

Resource Purpose
API reference Public functions, arguments, and return values
Architecture Module boundaries and design principles
FAQ Common questions and limitations
Examples Runnable Python examples
Changelog Release history

License

FitCheck is released under the Apache 2.0 License. See LICENSE.

Metadata

Release files for data-fitcheck 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for data-fitcheck 2.0.2
File Size Uploaded
data_fitcheck-2.0.2.tar.gz 38.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for data-fitcheck 2.0.2
File Interpreter ABI Platform
data_fitcheck-2.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 65.2 kB

Release files / data_fitcheck-2.0.2.tar.gz

Download URL data_fitcheck-2.0.2.tar.gz
Size 38.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0d904f51690644228f83e650ba6d0b56f88045116d05aef62337c0bf74e663d3
BLAKE2b-256 checksum
How to use checksums
09f0394d19bbe676a9ef549406492824e3f7044cbb3ffc89bcd0923393938fe3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / data_fitcheck-2.0.2-py3-none-any.whl

Download URL data_fitcheck-2.0.2-py3-none-any.whl
Size 27.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f02aff149771f0a58da656aefb0b51eda70b62b95af63399ef930ad971965565
BLAKE2b-256 checksum
How to use checksums
39ee4b0c9dca084a5b203c6a154ed1a47e2bfb5fecd6ea59adcde3cdc4b077ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

3.4.0

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

This release

2.0.2 This release

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page