Inspiration

Most of us have had a weird charge show up on a credit card or found something on our credit report that wasn't ours. Filing a complaint with the CFPB is supposed to help, but we wondered how often it actually does. When we started digging through the CFPB complaint database, we noticed that the same handful of companies kept showing up. We also saw that complaints about "Incorrect information on your report" had exploded, growing 542% between 2023 and 2025. That made us want to find out who gets relief, where complaints come from, what's driving the surge, and whether the credit card market is becoming more concentrated.

What it does

Our project is an interactive web dashboard built in Gradio with three tabs:

  • Market Concentration (HHI): shows how concentrated the credit card market has been since 2011 and where it's heading.
  • EDA: a surge map showing which states' complaints grew fastest compared to the nation (you can type in any issue), plus charts of the top companies, how companies respond, and how people submit complaints.
  • Consumer Relief Likelihood: you pick a company and a submission method, and it shows how often past complaints like yours got relief (money back or a fix), along with whether relief is likely or unlikely.

Behind the dashboard, our notebook also looks at whether certain states complain about different problems than the rest of the country, and how DC and Delaware compare to everyone else.

How we built it

We built everything in Google Colab with Python (pandas, numpy, matplotlib, and gradio).

  1. Getting the data: We collected 263,028 CFPB complaints from 2022 to 2025, mostly about credit cards, and hosted a compressed copy on our GitHub so the notebook could load it reliably.
  2. Cleaning: We standardized column names, converted dates, and added a column marking whether each consumer got relief.
  3. Exploring: We made 8 EDA charts, including a US tile map of complaints per 100,000 people.
  4. State analysis: We built heatmaps comparing the top 10 states against the top 10 issues. For each state and issue, we calculated an over-index score:

$$ \text{Over-index} = \frac{\text{state's share of complaints on an issue}}{\text{national share on that issue}} \times 100 $$

A score of 100 means the state matches the national average, and 150 means it complains about that issue 50% more.

  1. Credit report surge: We compared each state's growth to the nation's:

$$ \text{Surge ratio}s = \frac{C{s,2025} / C_{s,2023}}{C_{US,2025} / C_{US,2023}} $$

  1. Market concentration model: Our teammate measured market concentration each month with the Herfindahl-Hirschman Index:

$$ HHI = \sum_{i=1}^{N} s_i^2 $$

where $s_i$ is each company's market share in percent. Using monthly HHI from 2011 to 2026, we trained six forecasting models (Naive, Drift, three ARIMA models, and ETS) on data through September 2023 and tested them on the three years after. ARIMA(1,0,1) did best, with an average error of about 5.7%:

$$ \text{MAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\left|\frac{y_t - \hat{y}_t}{y_t}\right| $$

It predicts HHI will rise slowly from about 700 to about 718 by 2029, which is still considered unconcentrated.

  1. Relief likelihood: For each company and submission method, we calculated the share of past complaints that got relief and labeled it likely or unlikely.
  2. Dashboard: We combined everything into a Gradio app with a public link.

We used Claude to help write and debug parts of the code. We ran everything ourselves, checked the results, and decided what the findings meant.

Challenges we ran into

  • The API kept blocking us. We got 403 "Access Denied" errors from the CFPB server, and our first successful call only returned 10 complaints. We ended up downloading the data once and hosting it on our GitHub instead.
  • The CFPB changed its categories in August 2023. In our data, one issue looked like it grew infinitely while a similar one dropped 100%, because the CFPB renamed it. Some of the growth from 2023 might come from relabeling rather than a real increase.
  • A sneaky color bug. Our surge map showed the fastest-growing states in dark blue instead of red, because matplotlib treats 1 differently from 1.0 when picking colors.
  • Combining everyone's work. Getting our teammate's model file to load into Colab took some trial and error before we got it pulling straight from GitHub.

Accomplishments that we're proud of

  • Turning 263,028 messy government records into a dashboard that anyone can click through.
  • Building a forecasting model that predicts credit card market concentration with about 5.7% error.
  • Finding that the credit report surge is not even across the country. Only 8 of 32 states grew close to the national rate. Virginia grew about 5 times faster than the nation, and Delaware and Texas about 2 times faster.
  • Finding huge differences in how companies respond. Among the top 10 companies, relief rates ranged from 6% to 89%.

What we learned

  • Big banks have more customers and big states have more people, so we had to compare shares and rates instead of totals. DC had the most complaints per person, at 191 per 100,000 residents.
  • Some states really do have different problems. Virginia complained about credit report errors 2.5 times more than average, and Texas's overall issue mix was the most different from the rest of the country.
  • In the fastest-growing states, credit report complaints went to the three credit bureaus even more than usual. In Virginia, Equifax got about 41% of these complaints, compared to about 29% nationally.
  • DC and Delaware's complaints looked a lot like the rest of the country's, and mostly went to big card issuers like Capital One and Citibank. Delaware is home to many credit card banks, which may explain part of this.
  • A category change can make a trend look bigger than it is, so we learned to check where sudden jumps come from.

What's next for Relief Rate Model

  • We want to divide complaints by each company's number of customers or market share, so big banks aren't punished just for being big.
  • We want to turn our relief estimate into a trained model that also uses the state and issue.
  • Many complaints include the consumer's own description, which could make relief predictions much more accurate.
  • We'd like to dig into why states like Virginia grew so fast, for example whether third parties are filing complaints on people's behalf.
  • Hosting the dashboard permanently and connecting it to new CFPB data would let it stay up to date.

Built With

Share this project:

Updates

Submission history