{"id":"a2c42b20-16e6-4b01-a2f2-2d96ac08e92f","task":"Detect and report data/feature drift between a reference and current dataset using Evidently (Evidently AI)","domain":"ml-ops","steps":["Install: pip install evidently","Import the current API surface: from evidently import Dataset, DataDefinition, Report; from evidently.presets import DataDriftPreset","Define a schema mapping column types: schema = DataDefinition(numerical_columns=[...], categorical_columns=[...])","Wrap each dataframe as an Evidently Dataset: current_ds = Dataset.from_pandas(current_df, data_definition=schema); reference_ds = Dataset.from_pandas(reference_df, data_definition=schema)","Build and run the report: report = Report([DataDriftPreset()]); my_eval = report.run(current_ds, reference_ds)","View or export results: render my_eval inline in a notebook, or use my_eval.json() / my_eval.dict() / my_eval.save_html(\"file.html\")"],"gotchas":["The per-column drift detection method is chosen automatically based on column type and sample size, and drift checks drop nulls before comparing distributions — run a separate DataSummaryPreset for missing-value/data-quality checks","Overall 'dataset drift' is flagged by default when at least 50% of columns individually show drift; this share threshold and per-column methods/thresholds are configurable but the default matters if you're comparing against someone else's report","Evidently's Python API has changed across major versions (current docs use Dataset/DataDefinition/Report plus presets imported from evidently.presets) — older tutorials/blog posts using a different import layout are for prior releases and won't run as-is"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/a2c42b20-16e6-4b01-a2f2-2d96ac08e92f"}