exam-evaluator / src /evaluate_local.py
KarmanovaLidiia
Initial clean commit for HF Space (models via Git LFS)
bcb314a
# src/evaluate_local.py
from pathlib import Path
import pandas as pd
from sklearn.metrics import mean_absolute_error as MAE
ROOT = Path(__file__).resolve().parents[1]
RAW = ROOT / "data" / "raw" / "Данные для кейса.csv"
PRED = ROOT / "data" / "processed" / "predicted.csv"
def main():
# читаем сырой (для реальной оценки берём «живую» колонку оценок)
raw = pd.read_csv(RAW, encoding="utf-8-sig", sep=";")
pred = pd.read_csv(PRED, encoding="utf-8-sig")
# аккуратно сопоставим по двум id, если есть; иначе по порядку строк
cols = list(raw.columns)
if {"Id экзамена","Id вопроса"}.issubset(cols):
key = ["Id экзамена","Id вопроса"]
df = raw[key + ["Оценка экзаменатора"]].merge(
pred[key + ["pred_score"]], on=key, how="inner"
)
else:
df = pd.DataFrame({
"Оценка экзаменатора": raw["Оценка экзаменатора"],
"pred_score": pred["pred_score"],
"№ вопроса": raw["№ вопроса"] if "№ вопроса" in raw.columns else None
})
df = df.rename(columns={"№ вопроса":"question_number"})
df = df.dropna(subset=["Оценка экзаменатора"]).copy()
df["err"] = (df["Оценка экзаменатора"] - df["pred_score"]).abs()
overall = df["err"].mean()
print(f"MAE (вся выборка): {overall:.3f}")
if "question_number" in df.columns and df["question_number"].notna().any():
for q in [1,2,3,4]:
mae_q = df.loc[df["question_number"]==q, "err"].mean()
print(f" Q{q}: MAE={mae_q:.3f}")
if __name__ == "__main__":
main()