<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MSF Forecast — Weekly U.S. Mass-Shooting Incidence on MSF Forecast — Mass-Shooting Forecasting Project</title><link>https://msf-forecast.hermanity.dev/</link><description>Recent content in MSF Forecast — Weekly U.S. Mass-Shooting Incidence on MSF Forecast — Mass-Shooting Forecasting Project</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://msf-forecast.hermanity.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Data &amp; Reproducibility</title><link>https://msf-forecast.hermanity.dev/data/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://msf-forecast.hermanity.dev/data/</guid><description>&lt;h2 id="reproduction-the-actual-code-end-to-end"&gt;Reproduction (the actual code, end-to-end)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://git.catalystgroup.tech/herman/msf-forecast-pipeline
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd msf-forecast-pipeline
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install -r requirements.txt &lt;span style="color:#75715e"&gt;# numpy, pandas, matplotlib, scipy, statsmodels, pytest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make all &lt;span style="color:#75715e"&gt;# ≈ 2 minutes on a single CPU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;End-to-end runtime: ~2 minutes on a single CPU. Six pytest cases cover the
loaders, feature builder, and metric helpers. Output:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;results/features.csv&lt;/code&gt; — 522-week × 40-feature panel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/predictions_test.csv&lt;/code&gt; — 104-week × 20-col TEST-set forecasts + actuals&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/metrics_{count,any,high}.csv&lt;/code&gt; — TEST-set metrics per task&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/cv_metrics.csv&lt;/code&gt; — rolling-origin development-CV scores&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/model_coefficients.csv&lt;/code&gt; — full NB GLM coefficients&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/model_metadata.json&lt;/code&gt; — study-weeks, RF-skip reason, training window&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/calibration_any.png&lt;/code&gt; — reliability diagram for the any-incident target&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results/figures/{observed_vs_predicted,feature_importance,residuals,roc_any}.png&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="inputs-all-public-all-committed-under-srcdataraw-in-the-pipeline-repo"&gt;Inputs (all public, all committed under &lt;code&gt;src/data/raw/&lt;/code&gt; in the pipeline repo)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th style="text-align: right"&gt;Rows&lt;/th&gt;
 &lt;th&gt;Source&lt;/th&gt;
 &lt;th&gt;Span&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gva_mass_shootings.csv&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: right"&gt;82&lt;/td&gt;
 &lt;td&gt;Codeholics/US-Mass-Shootings (Mother Jones enrichment)&lt;/td&gt;
 &lt;td&gt;2014–2023&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gtrends_mass_shooting.csv&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: right"&gt;120&lt;/td&gt;
 &lt;td&gt;proxy: monthly incident count from the same source&lt;/td&gt;
 &lt;td&gt;2014-01 → 2023-12&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nics_monthly.csv&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: right"&gt;299&lt;/td&gt;
 &lt;td&gt;BuzzFeed News / FBI NICS&lt;/td&gt;
 &lt;td&gt;1998-11 → 2023-09&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;us_population.csv&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: right"&gt;11&lt;/td&gt;
 &lt;td&gt;World Bank &lt;code&gt;SP.POP.TOTL&lt;/code&gt; (USA)&lt;/td&gt;
 &lt;td&gt;2014–2024&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To regenerate from the original public sources:&lt;/p&gt;</description></item><item><title>Figures</title><link>https://msf-forecast.hermanity.dev/figures/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://msf-forecast.hermanity.dev/figures/</guid><description>&lt;p&gt;All five figures are downloaded directly from the pipeline repo at
&lt;code&gt;results/figures/&lt;/code&gt; (commit &lt;code&gt;cf180acf&lt;/code&gt;). Click to open full-size PNG.&lt;/p&gt;
&lt;h2 id="observed-vs-predicted-test-window"&gt;Observed vs Predicted (TEST window)&lt;/h2&gt;
&lt;p&gt;The full-feature negative-binomial GLM point predictions against actual
weekly counts for the held-out 2022-W01 → 2023-W52 window.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://msf-forecast.hermanity.dev/results/figures/observed_vs_predicted.png"&gt;![](&lt;/a&gt;](/results/figures/observed_vs_predicted.png)&lt;/p&gt;
&lt;h2 id="feature-importance"&gt;Feature Importance&lt;/h2&gt;
&lt;p&gt;Top-20 features by absolute coefficient from the full-feature NB GLM,
ordered for stability across re-fits.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://msf-forecast.hermanity.dev/results/figures/feature_importance.png"&gt;![](&lt;/a&gt;](/results/figures/feature_importance.png)&lt;/p&gt;
&lt;h2 id="residuals-test"&gt;Residuals (TEST)&lt;/h2&gt;
&lt;p&gt;Time series of &lt;code&gt;(y - y_hat)&lt;/code&gt; on the test window, with shaded ±1σ bands from
the rolling-origin backtest residuals.&lt;/p&gt;</description></item><item><title>Methodology</title><link>https://msf-forecast.hermanity.dev/methodology/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://msf-forecast.hermanity.dev/methodology/</guid><description>&lt;h2 id="targets"&gt;Targets&lt;/h2&gt;
&lt;p&gt;Three weekly targets are forecast independently:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;target_count&lt;/code&gt;&lt;/strong&gt; — Poisson / negative-binomial regression of weekly incident
counts. Range 0–3 in TEST.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;target_any&lt;/code&gt;&lt;/strong&gt; (binary, ≥1 incident in week) — logistic regression. Base rate
in the TEST window: &lt;strong&gt;22%&lt;/strong&gt; (23 of 104 weeks).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;target_high&lt;/code&gt;&lt;/strong&gt; (binary, ≥2 incidents in week) — logistic regression. Base rate
in the TEST window: &lt;strong&gt;1%&lt;/strong&gt; (1 of 104 weeks).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All targets share the same weekly panel and the same feature set.&lt;/p&gt;</description></item><item><title>Paper</title><link>https://msf-forecast.hermanity.dev/paper/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://msf-forecast.hermanity.dev/paper/</guid><description>&lt;h2 id="abstract"&gt;Abstract&lt;/h2&gt;
&lt;p&gt;This study tests whether a small collection of publicly observable signals can
forecast weekly United States public mass-shooting incidence. The outcome is the
number of Mother Jones / Codeholics-defined incidents in each Monday–Sunday ISO
week: a public, indiscriminate shooting with at least three fatalities. We build
a 522-week panel from 2014-W01 through 2023-W52 and reserve the final 104 weeks,
2022-W01 through 2023-W52, as a fixed test set. Predictors include trailing
incident counts, seasonality, holiday and school-session indicators, lagged FBI
NICS counts, annual population, and a completed-month incident-frequency proxy
for public attention. We compare a week-of-year seasonal mean, a lag-only
negative-binomial (NB) model, a regularized full NB model, and regularized
logistic models for &amp;quot;any incident&amp;quot; and &amp;quot;at least two incidents.&amp;quot;&lt;/p&gt;</description></item><item><title>Results</title><link>https://msf-forecast.hermanity.dev/results/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://msf-forecast.hermanity.dev/results/</guid><description>&lt;p&gt;TEST window: &lt;strong&gt;2022-W01 → 2023-W52&lt;/strong&gt; (104 weeks, held out from all model fitting).
TEST window observed: &lt;strong&gt;23 weeks&lt;/strong&gt; with ≥1 incident (prevalence 22%), &lt;strong&gt;1 week&lt;/strong&gt;
with ≥2 incidents (prevalence 1%).&lt;/p&gt;
&lt;h2 id="count-task--best-on-tail-quantile-loss"&gt;Count task — best on tail-quantile loss&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;RMSE&lt;/th&gt;
 &lt;th&gt;MAE&lt;/th&gt;
 &lt;th&gt;MAPE&lt;/th&gt;
 &lt;th&gt;pinball 0.5&lt;/th&gt;
 &lt;th&gt;pinball 0.8&lt;/th&gt;
 &lt;th&gt;pinball 0.9&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;naive_seasonal&lt;/td&gt;
 &lt;td&gt;0.4653&lt;/td&gt;
 &lt;td&gt;0.3096&lt;/td&gt;
 &lt;td&gt;30.00&lt;/td&gt;
 &lt;td&gt;0.1154&lt;/td&gt;
 &lt;td&gt;0.1865&lt;/td&gt;
 &lt;td&gt;0.1087&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;nb_lag&lt;/td&gt;
 &lt;td&gt;0.4524&lt;/td&gt;
 &lt;td&gt;0.3191&lt;/td&gt;
 &lt;td&gt;31.02&lt;/td&gt;
 &lt;td&gt;0.1154&lt;/td&gt;
 &lt;td&gt;0.1942&lt;/td&gt;
 &lt;td&gt;0.0827&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;nb_full&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0.4502&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;0.3438&lt;/td&gt;
 &lt;td&gt;33.50&lt;/td&gt;
 &lt;td&gt;0.1154&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0.1673&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0.0817&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The full-feature Negative-Binomial model (&lt;code&gt;nb_full&lt;/code&gt;) &lt;strong&gt;dominates the upper
quantiles&lt;/strong&gt; (pinball@0.8 and pinball@0.9) where mass-shooting forecasting
actually matters. RMSE / MAE / MAPE are near-tied across all three models —
the target class is sparser than the autoregressive signal can resolve.&lt;/p&gt;</description></item></channel></rss>