Spaces:
Sleeping
Sleeping
File size: 1,861 Bytes
37ff7c9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | from __future__ import annotations
import argparse
from pathlib import Path
from credexp.monitoring.drift import (
align_reference_and_current,
build_drift_report,
load_current_dataframe,
load_reference_dataframe,
save_drift_report,
)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Generate Evidently data drift report.")
parser.add_argument(
"--limit",
type=int,
default=5000,
help="Number of latest production rows to pull from PostgreSQL.",
)
parser.add_argument(
"--output-html",
type=str,
default="reports/monitoring/evidently_drift.html",
help="Output path for the HTML report.",
)
parser.add_argument(
"--output-meta",
type=str,
default="reports/monitoring/evidently_drift_meta.json",
help="Output path for metadata JSON.",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
reference_df = load_reference_dataframe()
current_df = load_current_dataframe(limit=args.limit)
reference_df, current_df = align_reference_and_current(reference_df, current_df)
report = build_drift_report(reference_df, current_df)
output_html = Path(args.output_html)
output_meta = Path(args.output_meta)
save_drift_report(
report,
output_html=output_html,
output_meta_json=output_meta,
n_reference=len(reference_df),
n_current=len(current_df),
n_features=len(reference_df.columns),
)
print(f"Drift report saved to: {output_html}")
print(f"Metadata saved to: {output_meta}")
print(f"Reference rows: {len(reference_df)}")
print(f"Current rows: {len(current_df)}")
print(f"Common features: {len(reference_df.columns)}")
if __name__ == "__main__":
main()
|