K Model User Manual
A step-by-step guide to using the Propulation K Model from login to projections — covering every section, every field, and every workflow.
What Is the K Model?
The Propulation K Model is an advanced pitcher strikeout and fantasy projection system. It takes pitcher-specific data, an opposing batting lineup, real-time Vegas lines, weather, park factors, and head-to-head history, then runs a multi-model ensemble to project how many strikeouts a pitcher is likely to record on a given day.
The model blends four sub-models — LightGBM, Poisson regression, Logistic regression, and Vegas line anchoring — with a default 60% weight on Vegas to produce calibrated projections with confidence intervals.
Proj K — Expected strikeouts for the start
80% CI — The range you should expect 80% of outcomes to fall within (e.g., 4.2 – 7.8 K)
xIP — Expected innings pitched
xER / xBB / xH — Expected earned runs, walks, hits
Fantasy Points — Projected DFS score (K×3, Out×1, ER×−3, Win+6, QS+4)
Risk Flags — Bullish/bearish signals (tough lineup, poor rest, unfavorable park, etc.)
Daily Workflow
Here is the recommended end-to-end process each day, from logging in to having a full slate of projections ready.
Visit propulation.tech/kmodel and enter your username and password. The login overlay disappears once authenticated.
Click the ⚡ Today's Starters button in the import bar on the Dashboard. This pulls today's MLB starting pitchers and auto-fills each pitcher's name, team, opponent, and stats from the database.
Click ⟳ PP Lines on the Dashboard. This pulls each pitcher's K line, over/under odds, outs line, hits allowed, and earned runs lines from OddsAPI + PrizePicks.
Click 📋 Today's Lineups in the import bar. Once confirmed lineups are posted, click 🔄 Refresh Lineups to update with the official batting orders.
Check the slate overview table. Confirm each pitcher has a ✓ lineup status. Review Proj K, CI, umpire adjustments, and risk flags before diving deeper.
Navigate to the Results page for full per-pitcher projection cards with confidence intervals, per-batter K probabilities, and signal contributions.
Dashboard
The Dashboard is your home base. It shows a summary of all pitchers in today's slate and gives you quick access to import starters, fetch lines, and scan the day at a glance.
Summary Tiles
Four metric tiles appear at the top of the Dashboard:
| Tile | What It Shows |
|---|---|
| Max Proj K | The highest single projected strikeout total across all pitchers in the slate, and who it belongs to. |
| Avg Proj K | Average projected strikeouts across all slate pitchers. |
| Ceiling K | The pitcher whose upper CI bound is the highest — best upside play. |
| Risk Flags | Total number of bearish/risk signals across the entire slate (e.g., tough lineup, bad park, short rest). |
Slate Projection Table
Each row in the table represents one pitcher. Columns explained:
| Column | Description |
|---|---|
| Pitcher | Starting pitcher name and team. |
| Opp | Opposing team abbreviation. |
| Lineup | Green ✓ means a lineup has been assigned. Gray — means no lineup yet. Affects projection accuracy. |
| xIP | Expected innings pitched based on pitch limit and historical hook patterns. |
| Proj K | The model's projected strikeout total for this start. |
| 80% CI | The 80% confidence interval (e.g., 4.1 – 7.9). Tighter = higher confidence. |
| Umpire Adj | The K-rate adjustment applied based on today's home plate umpire's historical K tendency. |
| Park | Park factor adjustment — stadiums like Coors Field suppress K rates; pitcher's parks boost them. |
| Rest | Days since the pitcher's last start. More rest can slightly reduce sharpness. |
| Flags | Number of risk signals (bullish = green, bearish = red). Click to see the full results card. |
Action Buttons
| Button | What It Does |
|---|---|
| ⟳ Starters | Fetches today's confirmed starters from the server and loads them into the slate. |
| ⟳ PP Lines | Fetches current Vegas K lines and prop odds from OddsAPI + PrizePicks. |
| Clear All ADMIN | Removes all pitchers from the slate. Use with caution. |
| Copy | Copies the projection table to your clipboard for pasting into a spreadsheet. |
Viewer Import Bar: Viewers see a green bar at the top of the Dashboard with three one-click buttons: ⚡ Today's Starters, 📋 Today's Lineups, and 🔄 Refresh Lineups. These are the only actions viewers need to load a complete slate.
Pitcher Input ADMIN
The Pitcher Input page is where you configure each starting pitcher. Most fields are auto-filled when you import starters, but you can review and adjust anything here.
Basic Info
| Field | Description |
|---|---|
| Pitcher Name | Start typing to search the database. Selecting from the autocomplete will auto-fill all stats fields. |
| Team | The pitcher's team. Used to look up park factor and lineup data. |
| Opponent | The opposing team. Used to look up opposing lineup K% and historical matchup data. |
| Throws | Right or Left-handed. Determines which platoon split stats are used against the lineup. |
Vegas Lines
These fields track the sportsbook lines for the pitcher. The model uses the K line as one of its four sub-model inputs (with a 60% default weight). Lines are auto-fetched but can be manually entered.
| Field | Description |
|---|---|
| K Line | The over/under strikeout line (e.g., 6.5). Primary Vegas input to the model. |
| K Open Line | The opening line before market movement. Used to detect sharp action. |
| Over / Under Odds | Juice on each side (e.g., -115 / -105). Used for expected value calculations. |
| Outs Line | Over/under for recorded outs (outs = IP × 3). |
| Hits Line | Hits allowed over/under. |
| BB Line | Walks (bases on balls) line, sourced from PrizePicks when available. |
| ER Line | Earned runs allowed over/under. |
| Team Moneyline | Optional. Used for Win probability in fantasy scoring. |
Historical Context
| Field | Description |
|---|---|
| Previous K Actuals | Pitcher's actual K totals from recent starts (most recent first, up to 8). Auto-filled from game logs. Used to detect form trends. |
| Prev K Vegas Lines | The Vegas K line from the pitcher's last 5 starts. Auto-pulled from K-line history. Helps contextualize if today's line is high or low relative to recent markets. |
| 1st Inn Pitches O/U | Optional. First inning pitch count line for Pitches Thrown Lab analysis. |
| Fantasy Pts O/U | Optional. Fantasy points over/under if available. |
Game Environment
These factors adjust the projection for the specific conditions of today's game.
| Field | Description |
|---|---|
| Umpire | Select today's home plate umpire. Each umpire has a calibrated K% adjustment based on historical tendencies (e.g., Angel Hernandez suppresses Ks, CB Bucknor inflates them). |
| Days Rest | Days since last start. Standard is 4-5 days. Fewer days = fatigue flag; many more = rust flag. |
| Catcher Framing | The catcher receiving pitches. Elite framers (e.g., Patrick Bailey) expand the strike zone, boosting K rates. Below-average framers shrink it. |
| Temperature | Game-time temperature in °F. Cold weather (under 50°F) reduces pitch grip and movement, lowering K rates slightly. |
| Wind Direction | Wind direction relative to the field. "In" (blowing toward batter) is pitcher-friendly. "Out" slightly aids hitters. |
| Wind Speed | Wind speed in mph. Only meaningfully affects projection at 15+ mph. |
| Day Game | Check if it's an afternoon game. Day games historically reduce K rates ~1.5% vs night games. |
| Expected IP | How many innings you expect the starter to pitch. Drag the slider. Hit OPENER to quickly set 2.0 IP for an opener role. |
| Pitch Limit | The expected hook threshold (default 95 pitches). The model uses this alongside IP to estimate the pitcher's K opportunity window. |
Pitch Arsenal
Define the pitcher's pitch mix. Click + Add Pitch to add rows. Select the pitch type (Fastball, Slider, Curveball, Changeup, Cutter, etc.) and enter the usage percentage. Percentages should total 100%. Each pitch type has its own whiff/K rate profile that multiplies against batter vulnerability.
Pitcher Rate Stats
These sliders are auto-filled from the database and represent the pitcher's 2025 season stats. Adjust only if you have reason to (e.g., recent injury affecting velocity).
| Stat | Description | Default |
|---|---|---|
| K% | The pitcher's overall strikeout rate — % of PA ending in strikeout. | 22.4% |
| Whiff% | Swing-and-miss rate on swings taken. Higher = more dominant stuff. | 24.5% |
| Zone% | % of pitches thrown in the strike zone. | 46.2% |
| Chase% | % of pitches outside the zone that batters swing at. | 29.9% |
| Zone Contact% | Contact rate on pitches in the zone (lower = better for pitcher). | 84% |
| Chase Contact% | Contact rate on pitches outside the zone (lower = better). | 63% |
| GB% | Ground ball rate. Less relevant to Ks but affects baserunner/ER model. | 44% |
Opponent Lineup Profile
These sliders describe the opposing lineup's aggregate tendencies. Auto-filled when a lineup is assigned. You can adjust manually to account for lineup stacks or missing players.
| Stat | Description |
|---|---|
| Opp K% | The lineup's average strikeout rate. Higher = more K-prone lineup (good for pitcher). |
| Opp Chase% | How often lineup batters chase pitches outside the zone. Higher = more exploitable. |
| Opp Whiff% | The lineup's swing-and-miss rate. Higher = more vulnerable to breaking balls. |
| Opp Zone Contact% | How often lineup batters make contact on pitches in the zone. |
Notes
Free-text field for anything relevant to this start — injury reports, pitch count concerns, recent mechanical changes, etc. Notes appear on the result card and in CSV exports.
Editing a pitcher won't reset its data. When you open a pitcher and make changes, only the fields you modify are updated — all enriched data (stats, profile picture, H2H history, lines) is preserved.
Lineup Builder
The Lineup Builder is where you enter the opposing batting order. Assigning a lineup to a pitcher significantly improves projection accuracy because the model computes a per-batter K probability for each of the 9 slots and weights them by expected plate appearances.
Entering a Lineup
Each of the 9 lineup slots has a name field with autocomplete from the batter database. Type a name and select the correct player. K%, handedness (L/R), and batter stats auto-fill.
Each batter row shows their K% and L/R hand. You can adjust the K% slider manually if you have updated info. Handedness determines which platoon split the model applies.
Use the Assign Lineup to Pitcher dropdown to select which pitcher this batting order faces. Click Assign Lineup. The Dashboard will show a green ✓ for that pitcher.
Click Save Lineup to store this order under a team name. Load it again next time that team is in the opposing slot.
Import Options
| Option | Description |
|---|---|
| Import Projected Lineups | Pulls RotoWire's projected batting orders for all games today. Best used before confirmed lineups are posted (typically 3-4 hours before first pitch). |
| 📋 Today's Lineups | Loads the lineup file that was last fetched by the server's daily refresh. Fastest option when lineups are confirmed. |
| 🔄 Refresh Lineups | Triggers a fresh scrape from the lineup source and reloads. Use this once confirmed lineups are officially posted. |
| Import Lineup JSON | Upload a lineup JSON file manually. Useful for historical backtesting or custom lineup scenarios. |
| Get Template | Download a blank JSON template to fill in manually. |
Lineup K Vulnerability Chart
Once a lineup is entered, a bar chart appears showing each slot's K vulnerability score. Spots 7-9 in the order are typically more K-prone. High vulnerability across the lineup is a bullish signal for the pitcher.
Game Lines
The Game Lines page projects run totals, team win probabilities, and F5/full game lines using a Monte Carlo simulation engine. This is useful for betting game totals alongside pitcher strikeout props.
Setting Up Games
Click Auto-Build from Slate to automatically populate all today's games using the pitchers already in your slate. This is the fastest way to get started.
Click Fetch Odds to pull current moneylines and run totals from the OddsAPI. Select your preferred bookmaker (DraftKings, FanDuel, BetMGM, etc.).
Choose the number of simulations (1K for speed, 10K for accuracy, 50K for maximum precision). Set Home Field Advantage % (default 3.5%) and League Avg ERA values.
Click Simulate. The model runs Monte Carlo simulations across all games and outputs projected run totals, F5 lines, and win probabilities for each team.
Bullpen Overrides: Each game card lets you override the default bullpen ERA for either team. Use this if a key reliever is unavailable or a team's bullpen is unusually depleted.
View Matchups
The Matchups page gives a batter-by-batter breakdown of how each hitter in the opposing lineup fares against the pitcher's arsenal. This is where you see the per-batter K probabilities before looking at the aggregate projection.
For each batter you'll see their K%, Whiff%, Chase%, handedness, and the model's estimated K probability for their plate appearances. Batters highlighted in red are low K-probability matchups (harder outs); those in green are high K-probability targets.
H2H history (head-to-head) is shown when available — if this pitcher has faced this batter in prior seasons, the Bayesian blend of that history is applied and noted here.
Projection Results
The Results page is the heart of the app. Each pitcher gets a full projection card with a complete breakdown of the model's output.
Reading a Result Card
| Field | What It Means |
|---|---|
| Proj K | The final blended projection — your primary number. |
| 80% CI | Confidence interval. "4.2 – 7.8" means 80% of simulated outcomes landed here. |
| xIP | Expected innings. Drives the K opportunity ceiling. |
| xK_inn1_2 | Projected Ks in just the 1st and 2nd innings — useful for first-inning props. |
| xK_inn1_3 | Projected Ks through the first 3 innings. |
| xER / xBB / xH | Expected earned runs, walks, and hits. Used in fantasy scoring. |
| Fantasy Pts | Full DFS fantasy point projection with breakdown (K×3, Out×1, ER×−3). |
| vs Vegas | Model projection vs. the current Vegas line. Shows if model is over or under the market. |
| Per-Batter Grid | A 9-slot grid showing K probability for each lineup spot. Deeper red = lower K prob; deeper green = higher K prob. |
| Signal Contributions | A transparency breakdown showing how much each feature (H2H, umpire, park, rest, etc.) moved the projection from the baseline. |
| Risk Flags | Bullish (green) and bearish (red) signals. Examples: "Elite lineup — tough matchup", "Strong umpire +4.2%", "Short rest — fatigue flag". |
| Sub-Model Outputs | The individual outputs from LightGBM, Poisson, Logistic, and Vegas before blending. Useful for seeing model agreement/disagreement. |
Wider CI = more uncertainty. A CI of 3.0 – 9.0 means this is a volatile start. A CI of 5.5 – 7.5 is high confidence. Use the CI width to size positions accordingly.
No lineup assigned? Projections without a confirmed lineup are less accurate. The model uses team-level K% averages as a fallback, which is less precise than slot-by-slot analysis. Always try to assign lineups before making final decisions.
Results Tracker ADMIN
The Tracker is your performance log. After games, record actual K totals here to build a historical record of model accuracy. This data also feeds the Backtester.
Logging a Result
Set the date and click Auto-Import. The app pulls actual game results from the MLB Stats API and fills in K totals, IP, and pitches automatically.
Select pitcher, enter the date, actual Ks, Vegas K line, IP, opponent, and actual pitches. Fantasy points and projected values auto-calculate.
Click Export CSV to download your full results log as a spreadsheet. Filename format: propulation_results_[date].csv.
Backtester ADMIN
The Backtester runs a walk-forward validation of the model on historical data to measure accuracy. It shows you how well the model would have performed on past starts.
Configuration
| Setting | Description |
|---|---|
| N Starts | How many starts to include in the backtest (100, 300, or 500). |
| Train Seasons | How many seasons of data to train on (2 or 3). More seasons = more stable, but slower to adapt to current-year trends. |
| Vegas Noise σ | Simulated noise added to Vegas lines during backtest to prevent overfitting. Higher = more conservative accuracy estimate. Default 1.8. |
| Use Tracker Results | Click this to run the backtest on your real logged results from the Tracker instead of synthetic data. Most accurate reflection of actual performance. |
Output Metrics
| Metric | What It Means |
|---|---|
| MAE | Mean Absolute Error — average projection error in Ks (e.g., 1.2 means off by 1.2 Ks on average). |
| RMSE | Root Mean Square Error — penalizes large misses more heavily than MAE. |
| Bias | Systematic over/under-projection. Positive = model projects too high; negative = too low. |
| Within ±1K | % of projections that landed within 1 strikeout of actual. |
| Within ±2K | % of projections that landed within 2 strikeouts of actual. |
| CI Coverage | % of actual outcomes that fell within the stated confidence interval. Should be ~80% for an 80% CI. |
| vs Vegas MAE | How the model's error compares to simply using the Vegas line. If model MAE < Vegas MAE, the model adds value. |
| R² | Coefficient of determination. 1.0 = perfect prediction; 0 = no better than guessing the mean. |
🔬 Pitches Thrown Lab
The Pitches Thrown Lab analyzes first-inning pitch counts using Baseball Reference data. It's useful for projecting first-inning pitch count props and understanding how quickly pitchers work through lineups early.
Use the dropdown to choose any pitcher in your slate or database.
Click Fetch BBRef Data to pull the pitcher's game log from Baseball Reference. The page loads their historical inning-by-inning pitch counts.
The page shows average pitch counts by inning, first-inning pitch sequences, and the distribution of first-inning totals. Use this to contextualize a first-inning pitches O/U line.
Model Config ADMIN
The Model Config page lets you tune the ensemble weights, feature parameters, and toggle which signals the model uses. Changes here affect every projection in the slate.
Ensemble Weights
The model blends four sub-models. You control the weight of each:
| Model | Default | What It Does |
|---|---|---|
| Vegas Line | 60% | Anchors the projection to the current sportsbook K line. High weight because Vegas aggregates enormous information efficiently. |
| Logistic | 17% | Per-batter logistic regression using pitch mix × batter vulnerability. Good at identifying lineup-specific edges. |
| LightGBM | 15% | Gradient boosted tree model trained on pitcher rate stats and context variables. Captures non-linear interactions. |
| Poisson | 8% | Statistical baseline based on expected plate appearances × K rate. Simple but robust. |
Weights must total 100%. The app normalizes them automatically when you adjust — if you raise one, others scale down proportionally.
Feature Parameters
| Parameter | Description |
|---|---|
| Prior PA | Bayesian H2H blending strength. Higher = more weight on season-level K% vs. small-sample H2H history. Default 50 PA. |
| Recency Half-Life | How many starts back before a pitcher's past performance is half-weighted. Default 10 starts. Lower = model reacts faster to recent form changes. |
| Batter Recent Form Weight | How much weight to give batters' last 14 days K% vs. season K%. Default 50%. |
| Confidence Interval | Width of the CI band shown in results. 80% (default), 90%, or 95%. Wider = more conservative. |
Active Features
Toggle individual signals on or off. All are enabled by default:
| Feature | What It Adjusts |
|---|---|
| Pitch Arsenal | Multiplies pitch type whiff rates against batter vulnerability profiles. |
| Bayesian H2H | Blends historical batter vs. pitcher matchup K data with the prior. |
| Umpire Factor | Applies the home plate umpire's K% deviation from league average. |
| Park Factor | Scales projection by stadium-specific strikeout suppression or boost. |
| Days Rest | Applies minor adjustments for extra rest or quick turnarounds. |
| Recency Weighting | Weights the pitcher's recent starts more heavily than older ones. |
| Chase/Zone Interactions | Models the interaction between pitcher zone control and batter chase tendencies. |
User Management
The bottom of the Model Config page contains the Users panel for adding and managing accounts.
| Action | Description |
|---|---|
| Create User | Enter a username, password (min 8 characters), and role (User or Admin). Click Create User. |
| Change Password | Admins can update their own password from the Change My Password card. |
| Delete User | Click the delete icon next to any user in the users table to remove their account. |
Import & Export
Import Options
| Import | Format | Description |
|---|---|---|
| Slate JSON | .json | Import a full set of pitcher configurations exported from a previous session. |
| Pitcher CSV | .csv | FanGraphs pitcher stats CSV (pitchers.csv). Updates the pitcher stats database. |
| Batter CSV | .csv | FanGraphs batter stats CSV (batters.csv). Updates the batter stats database. |
| Lineup JSON | .json | Manual batting lineup upload for a specific team/game. |
| Backtest CSV | .csv | Historical pitcher start data for running the backtester on real results. |
Export Options
| Export | Format | Description |
|---|---|---|
| Slate JSON | .json | Download all current pitcher configurations. Filename: starters_[date].json. |
| Projections HTML | .html | A fully standalone HTML report of all projection cards — shareable without needing the app. Filename: ko_projections_[date].html. |
| Game Lines | .html | Standalone report of game line projections and Monte Carlo results. |
| Tracker CSV | .csv | Full results log with actual vs projected Ks, IP, fantasy points. Filename: propulation_results_[date].csv. |
| Results CSV ADMIN | .csv | Raw projection data for all pitchers in the slate for further analysis. |
Glossary
Key terms and abbreviations used throughout the app.