Featuresmith Icon
Featuresmith
  • Docs
  • SDK
  • CLI
  • Examples
  • Roadmap
v0.4.0
Documentation

Getting Started

  • Introduction
  • Installation
  • Quick Start
  • Tutorial Notebooks
  • Benchmarks
  • Development Setup
  • Contributing

Core Concepts

  • Architecture Overview
  • Dataset Layer
  • Connectors
  • Profiling Engine
  • Rule Engine
  • Dataset Review Engine
  • ML Readiness Score
  • Target Leakage Detection
  • Dataset Diff Engine
  • Target Column Concept
  • Mental Model & Workflow
  • Interpreting Findings
  • Workflow Cheat Sheet
  • Beginner Glossary

Python SDK

  • load()
  • profile()
  • analyze()
  • review()
  • diff()
  • score()
  • plan()
  • Dataset
  • Data Models
  • Profile Models
  • Rule & Finding Models
  • Review Models
  • Score Models
  • Leakage Models
  • Diff Models
  • Exceptions
  • Plugins

CLI Reference

  • analyze
  • review
  • diff
  • score
  • plan
  • Configuration

Guides

  • CI/CD Integration
  • Custom Rules
  • Writing Plugins

Resources

  • Release Notes
  • FAQ
  • Troubleshooting
DocsGuide

Getting Started

  • Introduction
  • Installation
  • Quick Start
  • Tutorial Notebooks
  • Benchmarks
  • Development Setup
  • Contributing

Core Concepts

  • Architecture Overview
  • Dataset Layer
  • Connectors
  • Profiling Engine
  • Rule Engine
  • Dataset Review Engine
  • ML Readiness Score
  • Target Leakage Detection
  • Dataset Diff Engine
  • Target Column Concept
  • Mental Model & Workflow
  • Interpreting Findings
  • Workflow Cheat Sheet
  • Beginner Glossary

Python SDK

  • load()
  • profile()
  • analyze()
  • review()
  • diff()
  • score()
  • plan()
  • Dataset
  • Data Models
  • Profile Models
  • Rule & Finding Models
  • Review Models
  • Score Models
  • Leakage Models
  • Diff Models
  • Exceptions
  • Plugins

CLI Reference

  • analyze
  • review
  • diff
  • score
  • plan
  • Configuration

Guides

  • CI/CD Integration
  • Custom Rules
  • Writing Plugins

Resources

  • Release Notes
  • FAQ
  • Troubleshooting
HomeDocsScore Models

Python SDK

Score Models

SDK Reference: ML Readiness Score objects

The ML Readiness Score is a deterministic 0-100 score computed entirely from an existing ReviewResult. It never reads raw data: every dimension derives from the findings a reviewer already produced, so a given review always yields the same versioned score.

MLReadinessScore

python
1@dataclass(frozen=True, slots=True)
2class MLReadinessScore:
3 scoring_version: str # "0.3.0"
4 overall: float # 0.0 to 100.0
5 dimensions: tuple[DimensionScore, ...]
6 summary: str
7 positive_findings: tuple[str, ...]
8 negative_findings: tuple[RuleFinding, ...]
9
10 def to_dict(self) -> dict[str, Any]: ...

DimensionScore

python
1@dataclass(frozen=True, slots=True)
2class DimensionScore:
3 id: str
4 label: str
5 score: float
6 weight: float
7 rationale: str
8 contributing_findings: tuple[RuleFinding, ...]
9 suggested_actions: tuple[str, ...]
10
11 def to_dict(self) -> dict[str, Any]: ...

The Seven Effective Dimensions

Each dimension carries a uniform default weight of 1.0. Consolidated dimensions read from multiple review sections; the registered Class Balance dimension is never applicable until its minority-class detector ships:

Dimension IDDimensionBacking Section(s)
score.schema_healthSchema Healthreview.schema.health
score.missing_valuesMissing Valuesreview.quality.missingness
score.feature_qualityFeature Qualityreview.quality.feature_quality
score.distribution_healthDistribution Healthreview.quality.basic_statistics
score.leakage_riskLeakage Riskreview.leakage
score.data_qualityData Qualityreview.quality.duplicates + review.quality.constants
score.consistencyConsistencyreview.schema.types + review.quality.cardinality

score.class_balance (Class Balance) is registered but never applicable: the minority-class detector is not yet implemented, so it is omitted from the aggregate rather than silently counted as a perfect or zero score.

Scoring Formula

Each dimension starts at a perfect 100.0 and deducts a fixed, versioned amount per finding based on severity:

  • Critical finding: -30.0 points
  • Warning finding: -15.0 points
  • Info finding: -5.0 points

Scores are clamped to [0, 100] and rounded to one decimal place. The overall score is the weighted average:

overall = sum(dim.score * dim.weight) / sum(dim.weight)

Inapplicable dimensions (whose backing section is absent) are omitted and their weights renormalized automatically, so a regression-only dataset is not penalized for classification-specific metrics.

Example

python
1import featuresmith as fs
2
3result = fs.review("data.csv", target_column="label")
4score = fs.score(result)
5
6if score:
7 print(f"Overall: {score.overall}/100")
8 for dim in score.dimensions:
9 if dim.score < 100.0:
10 print(f" {dim.label}: {dim.score}/100 - {dim.rationale}")
11 print(f" Actions: {dim.suggested_actions}")

Explore

  • Quick Start
  • Python SDK
  • CLI Reference
  • Examples
Featuresmith Icon
Featuresmith

Open-source data profiling and validation for Python engineers.

Documentation

  • Introduction
  • Quick Start
  • Python SDK
  • CLI Reference

Community

  • GitHub
  • Discussions
  • Issues
  • Contributing

Project

  • Roadmap
  • Release status
  • Benchmarks
  • Changelog
  • Examples

Legal

  • Apache 2.0 License
  • Code of Conduct
  • Security

© 2026 Featuresmith Contributors. Released under the Apache 2.0 License.

Built by Aditya Gangwani in the open.