Please enable javascript in your browser to view this site!


Our application user guides are intendended to help you a) use our applications more efficiently and b) understand their underlying methodology. Use the menu to the left to navigate to each application page. Use the menu to the right to navigate to each application's user guide in this page.


DFS Baseball is also a stackable game. Unlike football, the agent in which players correlate isn't their position, but rather where they hit in their team's batting order. With favorable sequencing, single events stand to mutually benefit multiple players - we see this happen most frequently with RBIs and runs scored. This app helps to quantify the strength of correlation between teams batting order positions. A user might first begin by identifying a game they want to stack (maybe due to a favorable pitching matchup or game environment), then they can refer to this app to determine which players make for the most correlated (or perhaps negatively correlated employing a high-floor cash strategy) stacks.

MLB_Batting Correlation-01.jpg
  1. Site input: Select the site scoring scheme you want to compare batting order correlations across.

  2. Team input: Select the team(s) whose batting order correlations you want to compare.

  3. Data download button: This button allows you to download the app output to the right.

  4. Team(s) column: This column shows the team associated with each row. When comparing multiple teams, the app is defaulted to sort by team and batting order within each team. However, sorting on one of the batting order columns (5) will unsort the rows by team, so you will need to refer to this column to determine what team is associated with the batting order correlation rows. There is no team defaulted to show, input the team(s) whose batting order correlations you want to view to populate the app output to the right.

  5. Batting order columns & rows: These rows and columns are used to frame the correlation matrix of batting order positions. To find the correlation between a team's 2nd and 3rd hitters, read the value that appears at the intersection of the 2nd row and 3rd column or the 3rd row and the 2nd column (you'll notice that these values are equal). This value is indicated by (6).

  6. Batting order correlation value: If you're unfamiliar with correlations, I suggest reading this article which I think provides a good introductory summarization of correlation. Correlations range from -1 to +1. A correlation value of zero means that two batting order positions are completely uncorrelated. As correlations approach -1, we say that these two batting order positions are strongly negatively correlated - meaning that as one position performs well, the other tends to perform poorly. As correlations approach +1, we say that these two batting positions are strongly positively correlated - meaning that as one position performs better, the other tends to perform better as well. Conversely, as one performs worse, the other tends to perform worse as well.


Just like NBA and NFL, we must consider the strength of opponent of players in MLB DFS - think of this application as the baseball version of our NBA OVP app. But for baseball, measurement of strength of opponent offers a number of issues that don't exist for basketball. Position (at least for the purposes of this app) doesn't really matter in baseball: there are really only two positions - batter and pitcher. Not all game environments are equal - certain ballparks have higher and lower baseline fantasy production levels. And lastly, equal outcomes don't always carry equal fantasy value - a double is worth more than just a double if there are runners on base or if the batter scores a run in the subsequent at bat. wFPA stands for "weighted fantasy points allowed", it is a measure of the average fantasy points allowed by a batter or pitcher to opposing pitchers or batters, scaled to the aforementioned variable factors.

  1. Site input: Select site scoring scheme to compare players over. DraftKings, FanDuel, or Yahoo only, can't select multiple.

  2. Batter(s) input: Select the batters whose wFPA you want to consider. The input is defaulted to show "All" batters and the "League Average". When selected, the "League Average" will appear as the first row in the output to the right. As it suggests, this is the average wFPA of all players' (including hitting pitchers) plate appearances. To compare specific hitters, delete "All" and add desired players to the input. Keep in mind that the wFPA for batters are the weighted pitching fantasy points they allow to pitchers per plate appearance.

  3. Pitcher(s) input: Select the pitchers whose wFPA you want to consider. This input operates identically to (2), but for pitchers, displaying the average weighted batting fantasy points they allow opposing hitters per plate appearance.

  4. Minimum plate appearance threshold: The application is defaulted to show the wFPA of all batters and pitchers who have registered a plate appearance (or batter faced in the case of pitchers). Small sample size players can sometimes display extreme and unreliable wFPA metrics. In this input, you can set a minimum plate appearances (or batters faced) threshold for players to appear in the output to the right.

  5. Date range input: In this input you can control the date range for which you want the data output to reflect. Changing the date range will affect players' wFPA and the league average wFPA. At the moment you can only view back to the 2018 season.

  6. Raw data download button: This download button will download play-by-play logs for the specified date range. Not all "plays" will factor into the wFPA metrics, as the dataset does contain steals, wild pitches, pickoffs, etc. The wFPA column in the output is a by-pticher of by-batter mean of the "batter_SP_PS_[DKP/FDP/YHP]" (for pitcher wFPAs) or "pitcher_SP_PS_[DKP/FDP/YHP]" (for batter wFPAs). The "SP" and "PS" stand for "sequence-projected" and "park-scaled" fantasy point totals, which we will discuss in (7).

  7. wFPA column: This column is the key metric in for the application. In short, it is a measure of the average pitching fantasy points allowed to pitchers by hitters per plate appearance or the average batting fantasy points allowed to hitters by pitchers per plate appearance/batter faced. We say in short, because it is not just a simple average fantasy points allowed by pitchers or hitters. As mentioned above, equal outcomes carry variable fantasy value based on sequencing (prior and future outcomes). The first fantasy value transformation we apply to all plate appearance outcomes is to determine the amount of "sequence-independent" fantasy points associated with that outcome. In the case of hitting outcomes, this is just the value of the hit type according to site scoring scheme. Home runs imply an additional fantasy bonus for the run scored and RBI that a hitter automatically registers by hitting the home run. Sequence-independent fantasy points ignore additional fantasy bonuses due to RBIs, subsequent stolen bases, or runs scored (with the exception being the implied RBI and run scored from home runs). We then add a linear regression estimation of the average "sequence-dependent" fantasy points associated with each outcome on top of the sequence-independent fantasy points, to create a uniform "sequence-projected" fantasy value for all plate appearance outcomes. Next we, scale this sequenced-projected fantasy value by a park factor. The idea being that, in a vacuum, the true strength of opposition of a pitcher who frequently plays at, say Coors Field, is deflated by not scaling back their sequence-projected fantasy points allowed. We use FanGraphs "Park Factors" - in short, these are percentage scales: 100 is an average park, a park factor of 105 means that there are 10% more run scored at this ballpark, a park factor of 98 means that there are 4% fewer runs scored at this ballpark. The next transformation that we impose on fantasy value of a plate appearance is a park factor scaling, resulting in a sequence-projected, park-scaled fantasy value associated with each outcome. The goal of metric, which we call wFPA or "weighted fantasy output allowed" is to report the the propensity of hitters and pitchers to allow fantasy points to the opposition, independent of sequencing or the park in which an outcome occurred.

  8. Batters & Pitchers output tabs: These tabs allow you to toggle between wFPA of pitchers and hitters. Keep in mind that hitters' wFPA is fantasy value allowed by hitters to pitchers, pitchers' wFPA is fantasy value allowed by pitchers to hitters.


The motivation behind this app is to create a dynamic interface for comparing the historical fantasy production of MLB players. We've tried to make it as customizable as possible, allowing for specification of DFS site scoring format, per-game total, per-plate-appearence, or per-inning comparison, and discrete quantile inclusion. As part of our commitment to data transparency, you can also download the raw data that produces the output, allowing you to explore nuances and game conditions that aren't displayed in the graphical output.

MLB_player distribution-03.jpg
  1. Pitcher input: Select pitchers to compare in the output, you can view one or more pitchers and/or batter. You can select pitchers by either clicking the box and scrolling down to the desired pitcher or by beginning to type the pitchers's name and then clicking the desired pitcher when their name appears in the dropdown.

  2. Batter input: Select batters as in the pitcher input. In the app you can compares batters to batters, pitchers to pitchers, or batters to pitchers.

  3. Site input: Select site scoring scheme to compare players over. DraftKings, FanDuel, or Yahoo only, can't select multiple.

  4. Total or per inning/plate appearance input: The app is defaulted to compare players' scoring distributions as game totals ("Total"). If you want to compare batters' fantasy point per plate appearance distributions or pitchers fantasy point per inning distributions, you can do so by selecting "Per Inning/PA". When comparing a pitcher to a batter, selecting "Per Inning/PA" will compare batter(s)' per-plate-appearance fantasy production to pitcher(s)' per-inning production.

  5. Starts only input: Select whether to include only games in which the player started in their distributions. This logic applies to both hitters and pitchers. This input should be used to omit games in which a batter pinch-hit, pinch-ran, or came on as a defensive substitution or restrict pitchers' distributions to only games in which they were the starting pitcher.

  6. Show quantiles input: This input allows you to control whether or not the distribution output also includes the scoring quantiles of the selected players that are indicated by the vertical lines and numbers in feaure (8). We think these are import metrics to consider, but as more players are compared, the output can become increasingly crowded.

  7. Raw data download button: Clicking this button downloads a .csv file called "ASA MLB Player Distribution Data.csv"; this file can be opened in Microsoft Excel. The file contains extra columns that aren't featured in the app, but might be of interest to DFS players trying to gain an edge based on further game considerations like weather, umpire, opponent, or home/away. The data only contains rows (each row represents a single player's box score line for a single game) for players that are selected in inputs (1) and/or (2). When a comparing pitchers to batters.

  8. Scoring quantiles: When "Yes" is selected in input (6), the output will show players' 5th, 10th, 25th, 50th (median), 75th, 90th, and 95th percentile fantasy scores from the current season. The numbers that appear on the x-axis are rounded scores. To aid with quantile discrepancy, the solid vertical line represent median production, the long dashed lines represent 25th and 75th percentile production, the dash-and-dotted lines represent 10th and 90th percentile production, and the dotted lines represent 5th and 95th percentile production levels.

  9. Player color legend: Refer to this legend for distinguishing multiple players' distributions and quantile production levels.


We've focused so much of our content to date on around roster construction. While this concept is at the core of DFS strategy, the experienced DFS player knows that the game selection and bankroll management is just as important. Our ROI & Game Selection App was created to help you track your ROI to aid in bankroll management and provide an analysis of which contests your playing most profitably. IMPORTANT: Your .csv uploads will remain private, they won't be saved to the app in any way.

  1. Site input: Select site scoring scheme to compare players over. DraftKings or FanDuel only, can't select multiple.

  2. Contest history uploader: Upload your DraftKings or FanDuel contest history .csv file. The app is very particular in terms of the .csv file that it reads in; you must not edit your playing history file, simply download directly from DraftKings or FanDuel, and upload the downloaded .csv file.

  3. Sports input: Select the sports that you would like to filter on. If there are any selected sports that aren't in your contest history, these sports will be omitted in the outputs.

  4. Rolling window input: The rolling window tabs (9-10) will show a rolling average of your ROI. In this input, set the size of the rolling average window. The default is set to 30 days, showing at each date your ROI over roughly the past month.

  5. Contest cuts input: This input allows you to select the cuts for which you can view your ROI. This input is defaulted to show cuts by contest size (H2H, 3-10, 11-100, 101-1000, and 1001+ opponents), contest entry fee ($0-5, $5-10, $11-100, $101-1000, and $1001+), contest type (cash games and GPPs), contest days (weekdays and weekends), and a custom filter (6).

  6. Custom contest filter: This input allows you to create a custom filter. Type in a word that appears in the contest title that you want to filter on, and the Contest Cut ROI tab (11) will display your ROI for contests which names contain the filter input and for contests which names donnot contain the filter input. For example, if you were curious to know you ROI in single-game "showdown" contests, you could type "Showdown" in this input and view your ROI for "Custom Filter: Showdown" and "Custom Filter: Not Showdown". Keep in mind that this filter is case-, spelling-, and punctuation-sensitive.

  7. Total ROI line graph: Output showing your total, to-date ROI and net winnings over time.

  8. By-Sport ROI line graph: Output showing your by-sport, to-date ROI and net winnings over time.

  9. Total Rolling ROI line graph: Output showing your total, n-day rolling ROI and net winnings over time.

  10. By-Sport Rolling ROI line graph: Output showing your by-sport, n-day rolling ROI and net winnings over time.

  11. Contest Cuts ROI bar graph: Output showing your ROI and net winnings by specified contest cuts.

  12. H2H Opponents table: Table showing your H2H performance vs. all your historical opponents. This tool can be useful when trying to avoid contests against skilled players and enter contests against weaker players.


Team stacking is pivotal for daily fantasy baseball success. It's not only important to pick the right team to stack, but to also pick the right players on that team to stack. We set out to design an application to serve as your command center to optimize your hitter stacks for MLB contests. The result: the ASA Team Stack app.

MLB_Team stack-05.jpg
MLB_Team stack-06.jpg
MLB_Team stack-07.jpg
MLB_Team stack-08.jpg
  1. Site input - Select the site scoring format you want to view.

  2. Team input - Select the team you want to view in the app output tabs below. You can only view one team at a time in the "Runs vs. Team FP" tab (7), and you can only view players from the team you select in the other three player tabs (8-10). For players that have played for multiple teams in the selected date range, you will only view data of the such players produced while on the specified team.

  3. Player(s) input - Select the players whose data you want to view in the player-level tabs (8-10). The default is set to show the players from the specified team with the eight highest medians.

  4. Player vs. runs comparison type - This input relates to the "Runs vs. Player FP" tab (9). Through this input, you can specify if you want the output to plot team runs (x) vs. players' fantasy points scored or the proportion of the team's total fantasy points each player accounts for (y).

  5. Date range input - Specify the date range for the data which you want to consider.

  6. Raw data download button - Download the batting box score data for the team, players, and date selected.

  7. Runs vs. Team FP tab - This tab displays a box-and-whisker plot of the team's total fantasy points scored across the different run totals they have scored during the specified date range. This article offers a short description of how to interpret box-and-whisker plots. Beneath the boxes is a trendline showing the general relationship between runs and total batting fantasy points specific to the team specified in input (2). This plot can be used in conjunction with pre-game implied run totals to develop crude projection for a full team stack (even though you can only select at most 4-5 players from a single offense.

  8. Player FP Proportions tab - This tab displays box-and-whisker plots for the historical proportion of a team's single-game fantasy point totals accounted for by each of the players specified in input (3). While this tab doesn't account for specific hitter-pitcher matchups, one could crudely use this tab in conjunction with (7) to project a median expectation for fantasy points scored by a player conditional on expected runs scored by the team by multiplying a player's median proportion by the median team total fantasy points associated with the team's implied point total.

  9. Runs vs. Player FP tab - While the player proportions tab (8) provides a general summary of proportion of team total fantasy points accounted for by each player, it doesn't provide any context about the conditions in which players contribute higher and lower proportional fantasy point totals to their team's total. This tab plots the player-specific trendlines between team runs scored and player fantasy point totals (default) or proportion of team fantasy points, depending on selection in input (4).

  10. Player FP Correlation tab - This tab allows you to consider the historical correlation between all the players selected in input (3). This matrix only considers data points in which both players at the intersecting cell were starters. For guidance on interpreting correlation coefficients, consult this short Wikipedia page. This is a computationally intensive page to generate, so you may experience some lag in the output of this page after changing or initializing any of the inputs.


Baseball is the sport where the referee plays the biggest role in DFS outcomes. Understanding which umpires are a part of the better and worse pitching environments might be a narrow area for creating an edge, but one in which we felt warranted some research and tool development. The purpose of this app is to develop and understanding of the hierarchy of umpires and how they contribute to pitcher game environments through associated strikeout frequencies.

MLB_net K%-16.jpg
  1. Umpires input: In this input, select the umpires that you would like to view in the app output to the right. You can view all umpires by selecting "All", or only a select set of umpires by deleting all and selecting your desired umpires from the dropdown menu.

  2. Columns input: In this input, select the columns that you want to display in the output. The "Actual K" and "Actual K%" are the total number of strikeouts (called and swinging) and the strikeout rates (No. of Ks divided by No. of plate appearances) observed by each number. The "Pred K" and "Pred K%" are the predicted or "expected" raw total and strikeout rates observed by each umpired, controlling for the K% of the pitchers and batters whose plate appearances they observed. The "Net K%", which is the focal column of this app, is the difference in "Actual K% and "Pred K%" - that is, how much higher of a strikeout rate did an umpire observe than we expected them to observe based on the pitchers and batters whose plate appearances they observed.

  3. Data download button: Clicking this button will download a data file called "ASA MLB Umpire Net K%.csv". This file is a full dataset of the umpires and their Actual K, Pred K, PA, Actual K%, Pred K%, and Net K% metrics. The dataset isn't any different from what is viewable in the app output window, but the .csv file could be utilized in your own projection algorithm or outside research.

  4. Columns output: These are the columns that are specified in input (3). The table is defaulted to sort alphabetically by umpire, but you can sort on any column by clicking the arrows next to the column name.


  1. Team Input: Select the teams whose run projection distributions and probabilities you want to compare. Selecting “All” will compare the distributions and probabilities of all teams.

  2. Custom Run Probability Input: Optional input for estimating the probability that each team exceeds (or scores equal to) the run total specified in this input. Output is shown in the “Max. Run Probabilities” tab (4).

  3. Show Quantiles Input: Yes/no input for specifying whether or not you would like the distribution output to show teams’ 5th, 10th, 25th, 50th (median), 75th, 90th, and 95th percentile run total projections.

  4. Tab Select: Toggle between distributional (“Run Total Projections”) and probabilistic (“Max. Run Probabilities”) run total projections.

  5. Team Legend: Legend for identifying teams’ distributions in the output plot.

  6. Highest Total Probability Output: Probability of each team scoring the most runs of the team set specified in (1). Not necessarily the probability of each team being the highest scoring team of the day, unless you have “All” selected.

  7. Custom Run Probability Output: Probability of each team scoring at least as many runs as specified in (2).



1.   Seasons Input: Select which seasons of data you would like to download. You can select a single season, or a range of seasons using the numeric slider.

2.   Dataset Type Input: Select which type of dataset you’d like to download. Different box score types have different columns based on the type. “Batting” and “Pitching” box scores are at the game level, while “Play by Play” box scores are at the play level.

3.   Data Download Button: Press this button to download the data that you have specified in (1) & (2) as a csv file.