Relationship between campaign finance and election results

Posted on May 2, 2022

The skills the authors demonstrated here can be learned through taking Data Science with Machine Learning bootcamp with NYC Data Science Academy.


Every two years in the United States, we enter a national election cycle. Every four years on the leap year, there's an election for both the President as well as one third of the Senate, and every House Representative. Since it is the year 2022, this is the midterm election for the 2020-2024 presidential term, which is expected to be hotly contested, as Republicans will be looking to regain control of Congress, while Democratic candidates will be looking to retain both houses. Of course, political campaigns - in battleground districts and states - can become very expensive based on the data collected.


Put simply, the objective of this study was to determine if there's a correlation between campaign fundraising and spending and the success of a political campaign for a seat in a national election. Using data from Kaggle's 2016 campaign finance dataset, I wanted to do an analysis of the data using Python and also see if there were floors or ceilings that you had to hit fundraising and spending wise in order to win an election for a House, Senate, or Presidential race.

In addition, I was looking to see if in close races (within 5 percentage points of each other), there was a dollar value that could be put on percentage points or even on an individual vote.

Process and Visualizations

First, I imported my data from Kaggle's 2016 campaign finance dataset. The columns that I was concerned with initially were total disbursement, total contributions, election result, individual contributions, contributions from PACs, and the total number of votes received, I then had to clean these up by assigning all missing values in a way that would make it easy to move into data visualizations.

Initial appearance of the data.







Next, I created a histogram to examine the distribution of total contributions across campaigns. I found that the median spend was $334153. I decided on using median instead of mean to analyze this bit of data as the national presidential elections were very large outliers, but I did want to keep them in the dataset. The middle 50% was between $3890 and $1,050,000.


Next, I wanted to compare the log of total contributions to the percentage of contributions from individuals. This was because I wanted to see if the source of the money had anything to do with a candidates success. To do this, and to help identify if it's worth targeting certain populations for soliciting campaign donations, I wanted to analyze the contributions of individuals who won their elections.


Proportion of contributions from individuals for winning candidates

What I found was that while there was no guarantee of a given candidate winning a race based on how much money was spent, I did identify a minimum spend that was required in order to win an election. The bare minimum contributions needed to win an election was $162,754.79. As a caveat, almost all candidates spent at a 1:1 ratio of money contributed to their campaigns, so I count this as spending as well.

Next, I analyzed the proportion of contributions from PACs compared to the log of total contributions.


The graph on the left represents only the losers, while the graph on the right is a stacked plot of winners and losers. While the winners of their elections fill in a significant gap in the plot, the vast majority being between 20% and 80% contribution from committees makes it hard to tell if there is a correlation. Therefore, it appears there is not a correlation between winning and losing and the amount of contribution from PACs, as the majority of candidates still got 90% or more of their funding from individuals, including the winner of the presidential election.


The conclusions I reached were that individual contributors are still an important part of the campaign fundraising process, and it would behoove any campaign to try and solicit as many individual contributions as possible. This is because there is a floor on fundraising that if you can't hit, you have no shot at winning your chosen election. In addition, I also found that running a campaign for Congress is significantly cheaper than running a presidential campaign, with the 75th percentile being at just over a million dollars.

When compared against the national fundraising needed for a presidential campaign, it's clear why most politicians get started at the state level elections. Also, there is no clear relationship as of yet between the amount of money fundraised and spent against the number of votes. This is partially due to population differences between states, but also because in the dataset there are only vote counts for the winners, and even then it is incomplete.

Further work

I'd like to eventually bring in another dataset where I can correlate the votes to a candidate's campaign, but I've been so far unsuccessful at finding a source that I trust and contains all the voting data. In addition, I'd like to use my web development background or Shiny to create a web app that can find and load a candidate's campaign finance data. Lastly, I want to eventually do this for the 2020 election, and hopefully be able to apply it in a machine learning model in the future that can try and predict where and how a candidate should spend their campaign funds in order to have the best possible chance at winning their election.

About Author

Michael O'Brien

Graduate of Colgate University '16 with degree in biochemistry. After college, began worked as a laboratory technician in the food chemistry sector, then moved into web development as a full-stack developer. Currently starting a new chapter and moving...
View all posts by Michael O'Brien >

Leave a Comment

No comments found.

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 2020 Revenue 3-points agriculture air quality airbnb airline alcohol Alex Baransky algorithm alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus ames dataset ames housing dataset apartment rent API Application artist aws bank loans beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep boston safety Bundles cake recipe California Cancer Research capstone car price Career Career Day citibike classic cars classpass clustering Coding Course Demo Course Report covid 19 credit credit card crime frequency crops D3.js data data analysis Data Analyst data analytics data for tripadvisor reviews data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization database Deep Learning Demo Day Discount disney dplyr drug data e-commerce economy employee employee burnout employer networking environment feature engineering Finance Financial Data Science fitness studio Flask flight delay gbm Get Hired ggplot2 googleVis H20 Hadoop hallmark holiday movie happiness healthcare frauds higgs boson Hiring hiring partner events Hiring Partners hotels housing housing data housing predictions housing price hy-vee Income Industry Experts Injuries Instructor Blog Instructor Interview insurance italki Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter las vegas airport lasso regression Lead Data Scienctist Lead Data Scientist leaflet league linear regression Logistic Regression machine learning Maps market matplotlib Medical Research Meet the team meetup methal health miami beach movie music Napoli NBA netflix Networking neural network Neural networks New Courses NHL nlp NYC NYC Data Science nyc data science academy NYC Open Data nyc property NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time performance phoenix pollutants Portfolio Development precision measurement prediction Prework Programming public safety PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R Data Analysis R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn seafood type Selenium sentiment analysis sentiment classification Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau teachers team team performance TensorFlow Testimonial tf-idf Top Data Science Bootcamp Top manufacturing companies Transfers tweets twitter videos visualization wallstreet wallstreetbets web scraping Weekend Course What to expect whiskey whiskeyadvocate wildfire word cloud word2vec XGBoost yelp youtube trending ZORI