| # figures_v2 outputs | |
| Generated by `figures_v2/scripts/make_all_figures.py`. | |
| Run: | |
| ```bash | |
| python figures_v2/scripts/make_all_figures.py --package-root . | |
| ``` | |
| Use PDF files in ACM LaTeX for vector output; PNG files are 300 dpi previews. | |
| ## fig1_task_graph | |
| Figure ID: `fig1_task_graph` | |
| Output files: `figures_v2/pdf/fig1_task_graph.pdf`, `figures_v2/png/fig1_task_graph.png`, `figures_v2/svg/fig1_task_graph.svg` | |
| Data source: schematic; README.md; data_and_docs/dataset.md | |
| Purpose in paper: Define author-paper link prediction on the heterogeneous academic graph. | |
| Caption draft: Heterogeneous author-paper graph and link-prediction task. Authors, papers, historical author-paper interactions, coauthor links, and directed paper-paper citations define the observed graph; each test author-paper pair is ranked for a binary recommendation decision. | |
| Known limitations: None. | |
| ## fig2_dataset_sparsity | |
| Figure ID: `fig2_dataset_sparsity` | |
| Output files: `figures_v2/pdf/fig2_dataset_sparsity.pdf`, `figures_v2/png/fig2_dataset_sparsity.png`, `figures_v2/svg/fig2_dataset_sparsity.svg` | |
| Data source: data_and_docs/author_file_ann.txt; data_and_docs/paper_file_ann.txt; data_and_docs/bipartite_train_ann.txt | |
| Purpose in paper: Show sparsity, long tails, and cold-start pressure in the official graph. | |
| Caption draft: Dataset sparsity and long-tail structure. Log-log CCDFs show heavy-tailed coauthor, citation, and author-paper degrees, while the low-degree panel shows the mass of cold-start nodes that motivates structural and high-order features. | |
| Known limitations: None. | |
| ## fig3_performance_evolution | |
| Figure ID: `fig3_performance_evolution` | |
| Output files: `figures_v2/pdf/fig3_performance_evolution.pdf`, `figures_v2/png/fig3_performance_evolution.png`, `figures_v2/svg/fig3_performance_evolution.svg` | |
| Data source: figures_v2/data/manual_metrics.csv; README.md; reports/*.md | |
| Purpose in paper: Summarize the method evolution from LightGCN to the final high-order stack. | |
| Caption draft: Performance evolution across model stages. LightGCN provides the collaborative filtering backbone, graph/meta-path stacking supplies the largest jump, random-walk blocks add complementary high-order proximity, and citation-aware propagation gives the final lift to public F1 = 0.96626. | |
| Known limitations: None. | |
| ## fig4_method_pipeline | |
| Figure ID: `fig4_method_pipeline` | |
| Output files: `figures_v2/pdf/fig4_method_pipeline.pdf`, `figures_v2/png/fig4_method_pipeline.png`, `figures_v2/svg/fig4_method_pipeline.svg` | |
| Data source: README.md; CLAUDE.md; code/high_order_graph_stack.py | |
| Purpose in paper: Explain the final two-stage LightGBM stacking pipeline. | |
| Caption draft: Final two-stage stacking pipeline. The first stage produces collaborative, graph, content, random-walk, and citation-propagation signals; the second-stage LightGBM stacker fuses roughly 259 features and uses a rank cutoff rather than a transferred probability threshold for submission generation. | |
| Known limitations: None. | |
| ## fig5_highorder_ablation | |
| Figure ID: `fig5_highorder_ablation` | |
| Output files: `figures_v2/pdf/fig5_highorder_ablation.pdf`, `figures_v2/png/fig5_highorder_ablation.png`, `figures_v2/svg/fig5_highorder_ablation.svg` | |
| Data source: validation_runs/dynamic_seed202/high_order_graph_stack/validation_summary.csv | |
| Purpose in paper: Quantify the value of high-order citation propagation without dual axes. | |
| Caption draft: High-order propagation ablation. F1 and AUC are shown in separate panels to avoid dual-axis ambiguity. Rich content and random-walk blocks improve the stack, undirected high-order features add the largest late-stage gain, and directed citation propagation gives the final improvement. | |
| Known limitations: None. | |
| ## fig6_calibration_rank_cutoff | |
| Figure ID: `fig6_calibration_rank_cutoff` | |
| Output files: `figures_v2/pdf/fig6_calibration_rank_cutoff.pdf`, `figures_v2/png/fig6_calibration_rank_cutoff.png`, `figures_v2/svg/fig6_calibration_rank_cutoff.svg` | |
| Data source: validation_runs\stack_ratio_analysis.csv; validation_runs\dynamic_seed202\high_order_graph_stack\threshold_submission_summary.csv | |
| Purpose in paper: Explain why rank cutoff is more robust than transferring a probability threshold. | |
| Caption draft: Rank cutoff versus probability-threshold transfer. The validation split is artificially balanced, so validation probabilities are not calibrated for test; a rank cutoff keeps the predicted-positive ratio fixed while the transferred probability threshold drifts to about 0.524 on test. | |
| Known limitations: None. | |
| ## figA1_lightgcn_sweep | |
| Figure ID: `figA1_lightgcn_sweep` | |
| Output files: `figures_v2/pdf/figA1_lightgcn_sweep.pdf`, `figures_v2/png/figA1_lightgcn_sweep.png`, `figures_v2/svg/figA1_lightgcn_sweep.svg` | |
| Data source: validation_runs\dynamic_summary.csv | |
| Purpose in paper: Document the LightGCN layer/dimension sweep. | |
| Caption draft: LightGCN validation sweep over propagation depth and embedding dimension. | |
| Known limitations: None. | |
| ## figA2_rw_ensemble | |
| Figure ID: `figA2_rw_ensemble` | |
| Output files: `figures_v2/pdf/figA2_rw_ensemble.pdf`, `figures_v2/png/figA2_rw_ensemble.png`, `figures_v2/svg/figA2_rw_ensemble.svg` | |
| Data source: D:\reps\26H1_cs3319_final_deliverable\validation_runs\dynamic_seed202\randomwalk_systematic\small_ablation_table.csv; D:\reps\26H1_cs3319_final_deliverable\validation_runs\dynamic_seed202\randomwalk_systematic\ensemble_5_ablation.csv; D:\reps\26H1_cs3319_final_deliverable\validation_runs\dynamic_seed202\randomwalk_systematic\ensemble_7_ablation.csv | |
| Purpose in paper: Show random-walk ensemble-size ablation. | |
| Caption draft: Random-walk ensemble-size ablation from the best single block to 5 and 7 blocks. | |
| Known limitations: None. | |
| ## figA3_feature_group_contribution | |
| Figure ID: `figA3_feature_group_contribution` | |
| Output files: `figures_v2/pdf/figA3_feature_group_contribution.pdf`, `figures_v2/png/figA3_feature_group_contribution.png`, `figures_v2/svg/figA3_feature_group_contribution.svg` | |
| Data source: figures_v2/data/manual_metrics.csv; reports/*.md | |
| Purpose in paper: Summarize incremental feature-group contributions from recorded ablations. | |
| Caption draft: Feature-group contribution measured as recorded incremental validation-F1 gains. | |
| Known limitations: None. | |
| ## figA4_error_buckets | |
| Figure ID: `figA4_error_buckets` | |
| Output files: `figures_v2/pdf/figA4_error_buckets.pdf`, `figures_v2/png/figA4_error_buckets.png`, `figures_v2/svg/figA4_error_buckets.svg` | |
| Data source: validation_runs\dynamic_seed202\error_group_calibration\error_analysis_buckets.csv | |
| Purpose in paper: Localize remaining weak regimes without a single overlong heatmap. | |
| Caption draft: Error buckets reveal cold-start and weak-evidence regimes. The panels separate degree, rank/score, and local-evidence buckets and highlight the lowest-F1 rows. | |
| Known limitations: None. | |
| ## figA5_oof_pr_score | |
| Figure ID: `figA5_oof_pr_score` | |
| Output files: `figures_v2/pdf/figA5_oof_pr_score.pdf`, `figures_v2/png/figA5_oof_pr_score.png`, `figures_v2/svg/figA5_oof_pr_score.svg` | |
| Data source: validation_runs\dynamic_seed202\val_labels_seed202.npy; validation_runs\dynamic_seed202\dyn202_l2d512_bpr_bigbatch_more\scores\val_vanilla_ensemble_mean.npy; validation_runs\dynamic_seed202\post95_ablation\ensemble_lgcn_oof.npy; validation_runs\dynamic_seed202\node2vec_deepwalk\node2vec_stack_oof.npy; validation_runs\dynamic_seed202\high_order_graph_stack\rich_rw7_highorder_directed_oof.npy | |
| Purpose in paper: Show OOF discrimination and readable final-score distributions. | |
| Caption draft: OOF precision-recall curves and final-score ECDFs. The ECDF view avoids density spikes and makes positive/negative separation readable. | |
| Known limitations: Only aligned OOF arrays are plotted. | |
| ## figA6_feature_importance | |
| Figure ID: `figA6_feature_importance` | |
| Output files: skipped | |
| Data source: cached_scores/lgb_model.pkl; cached_scores/lgb_v2_model.pkl | |
| Purpose in paper: LightGBM model feature importance if model metadata is reliably loadable. | |
| Caption draft: Skipped unless LightGBM and feature names are available. | |
| Known limitations: LightGBM is not importable in this environment and reliable feature names are not available; no importance plot was generated. | |
| ## LaTeX insertion | |
| Single-column figure: | |
| ```latex | |
| \begin{figure} | |
| \centering | |
| \includegraphics[width=\columnwidth]{figures_v2/pdf/fig2_dataset_sparsity.pdf} | |
| \caption{...} | |
| \end{figure} | |
| ``` | |
| Double-column figure: | |
| ```latex | |
| \begin{figure*} | |
| \centering | |
| \includegraphics[width=\textwidth]{figures_v2/pdf/fig4_method_pipeline.pdf} | |
| \caption{...} | |
| \end{figure*} | |
| ``` | |