|
7 | 7 | def task_evaluate_ar_models( |
8 | 8 | script=SRC / "analysis" / "evaluate_ar_model.py", |
9 | 9 | data=BLD / "data" / "cleaned_apple_data.pkl", |
10 | | - produces=BLD / "models" / "ar_model_evaluation.pkl", |
| 10 | + produces=( |
| 11 | + BLD / "models" / "ar_model_evaluation.pkl", |
| 12 | + BLD / "models" / "top_models.tex", |
| 13 | + ), |
11 | 14 | max_p=15, |
12 | 15 | criterion="aic", |
13 | 16 | ): |
14 | | - """Evaluate AR(p) models and save top models and metrics.""" |
15 | 17 | df = pd.read_pickle(data) |
16 | | - |
17 | 18 | evaluation_results = evaluate_ar_models(df, max_p=max_p, criterion=criterion) |
18 | 19 |
|
19 | | - top_models_data = evaluation_results.get("top_models", []) |
20 | | - metrics_data = evaluation_results.get("model_metrics", []) |
21 | | - metadata_data = evaluation_results.get("metadata", {}) |
22 | | - |
23 | | - top_models_df = pd.DataFrame(top_models_data) if top_models_data else pd.DataFrame() |
24 | | - metrics_df = pd.DataFrame(metrics_data) if metrics_data else pd.DataFrame() |
25 | | - metadata_df = pd.DataFrame([metadata_data]) if metadata_data else pd.DataFrame() |
26 | | - |
27 | | - results = { |
28 | | - "top_models": top_models_df, |
29 | | - "model_metrics": metrics_df, |
30 | | - "metadata": metadata_df, |
31 | | - } |
32 | | - |
33 | | - produces.parent.mkdir(parents=True, exist_ok=True) |
34 | | - pd.to_pickle(results, produces) |
35 | | - |
36 | | - assert produces.exists(), f"❌ Failed to produce {produces}" |
| 20 | + produces[0].parent.mkdir(parents=True, exist_ok=True) |
| 21 | + pd.to_pickle(evaluation_results, produces[0]) |
| 22 | + assert produces[0].exists(), f"❌ Failed to produce {produces[0]}" |
| 23 | + |
| 24 | + top_models_df = pd.DataFrame(evaluation_results.get("top_models", [])) |
| 25 | + |
| 26 | + if not top_models_df.empty: |
| 27 | + latex_table = top_models_df.drop( |
| 28 | + columns=["coefficients", "integrated_coefficients"], errors="ignore" |
| 29 | + ) |
| 30 | + |
| 31 | + expected_columns = ["p", "aic", "bic", "p_value", "differenced"] |
| 32 | + latex_table = latex_table[ |
| 33 | + [col for col in expected_columns if col in latex_table.columns] |
| 34 | + ] |
| 35 | + |
| 36 | + with produces[1].open("w", encoding="utf-8") as f: |
| 37 | + f.write("\\begin{table}[H]\n") |
| 38 | + f.write("\\centering\n") |
| 39 | + f.write("\\caption{Top AR Models}\n") |
| 40 | + f.write("\\label{tab:top_models}\n") |
| 41 | + f.write("\\begin{tabular}{|c|c|c|c|c|}\n") |
| 42 | + f.write("\\hline\n") |
| 43 | + f.write("p & AIC & BIC & p-value & Differenced \\\\\n") |
| 44 | + f.write("\\hline\n") |
| 45 | + |
| 46 | + for _, row in latex_table.iterrows(): |
| 47 | + f.write( |
| 48 | + f"{int(row['p'])} & {row['aic']:.3f} & {row['bic']:.3f} & " |
| 49 | + f"{row['p_value']:.5f} & {row['differenced']!s} \\\\\n" |
| 50 | + ) |
| 51 | + |
| 52 | + f.write("\\hline\n") |
| 53 | + f.write("\\end{tabular}\n") |
| 54 | + f.write("\\end{table}\n") |
| 55 | + |
| 56 | + assert produces[1].exists(), f"❌ Failed to produce {produces[1]}" |
0 commit comments