File size: 1,843 Bytes
bcb314a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 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()