Francisca Dias
This report lists each failure of a commercial bank, savings association, and savings bank since the establishment of the FDIC in 1933.
This dataset goes from 1934 till 2017.
Each record includes the institution name and FIN number, institution and charter types, location of headquarters (city and state), effective date, insurance fund and certificate number, failure transaction type, total deposits and total assets last reported prior to failure (in thousands of dollars), and the estimated cost of resolution.
Data on estimated losses are not available for FDIC insured failures prior to 1986 or for FSLIC insured failures from 1934-88.
In this dataset, 70% of all Financial Institutions are Commercial Bank.
The majority of them were acquired afterwards.
Most of these failures occurred during the S&L crisis.
The highest amount estimated loss belongs to IndyMac Bank that reported 12 Billion in losses.
This dataset can be found here.
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import seaborn as sns
import numpy as np
plt.style.use('fivethirtyeight')
banks = pd.read_csv('banks.csv')
banks.head(2)
In this dataset, 70% of all Financial Institutions are Commercial Bank.
When these Financial Institutions went bankrupt, the majority (70%) was acquired. The rest 30% was as payout, transfer, change management and privatization.
Number of Institutions by Type
banks['Institution Type'].value_counts()
Number of Charter by Type
banks['Charter Type'].value_counts()
Number of Insurance Fund by Type, and description
banks['Insurance Fund'].value_counts()
# BIF Bank Insurance Fund
# FDIC Federal Deposit Insurance corporation
# DIF Deposit Insurance Fund
# FSLIC Federal Savings and Loan Insurance Corporation
Type of Transactions that was done once the Institution Failed
banks['Transaction Type'].value_counts()
What is the Institution Type that fails most?
What is the Charter Type that fails most?
What is the most common transaction type after bank fails?
print('Institution Type that fails most:',banks['Institution Type'].value_counts().index[0])
print('Charter Type that fails most:',banks['Charter Type'].value_counts().index[0])
print('Most common transaction type after bank fails:',banks['Transaction Type'].value_counts().index[0])
Change to date type
banks['Failure Date'] = pd.to_datetime(banks['Failure Date'])
Include Year and Month to the dataset
banks['year'], banks['month'] = banks['Failure Date'].dt.year, banks['Failure Date'].dt.month
The aftermath of the savings and loan crisis (S&L crisis) of the 1980s and 1990s is very clear in the graphic below. During that period, 1,043 financial institutions went bankrupt.
It is interesting to see that the impact of the 2008 financial crisis was weaker than the S&L crisis in terms of commercial banks failures.
fail_trend=pd.crosstab(banks.year,banks["Institution Type"])
fail_trend.plot(color=sns.color_palette('Set2',12), figsize=(15,8))
fig=plt.gcf()
plt.title('Chronological map of Institution failures, by type', fontsize=20)
plt.ylabel('Number of Institutions Failures')
plt.xlabel('Year')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
fig.set_size_inches(18,6)
plt.show()
The year 1989 registered more failures, followed by 1990 and 1991.
plt.subplots(figsize=(15,8))
sns.countplot('year',data=banks,palette='RdBu_r', edgecolor=sns.color_palette('dark',7),order=banks['year'].value_counts().index)
plt.title('Bank failures ordered by size and year', fontsize=20)
plt.ylabel('Number of Institutions Failures')
plt.xlabel('Year')
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.xticks(rotation=90)
plt.show()
Add a column with the state in which the Institution has its headquarters
banks["state"] = banks["Headquarters"].astype(str).str[-2:]
Most of these commercial banks had its headquarteres in Texas.
Then follows the states of California, Illinois and Florida.
plt.subplots(figsize=(15,8))
sns.countplot('state',data=banks,palette='inferno',edgecolor=sns.color_palette('dark',7),order=banks['state'].value_counts()[:10].index)
plt.xticks(rotation=90)
plt.title('Bank failures ordered by State', fontsize=20)
plt.ylabel('Number of Institutions Failures')
plt.xlabel('State')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.show()
As said previouslly, most of this dataset is represent by Commercial Banks, followed by savings association and savings bank.
cmap = sns.diverging_palette(220, 15, as_cmap=True)
product_size = banks.groupby(['Institution Type']).size()
ax = product_size.plot.pie(y='product', figsize=(8, 8), colormap=cmap, autopct='%1.0f%%',pctdistance=0.5, labeldistance=1.2)
handles, labels = ax.get_legend_handles_labels()
lgd = ax.legend(handles, labels, bbox_to_anchor=(1.3, 0.8), loc=2, borderaxespad=0., fontsize=12)
plt.ylabel(' ')
plt.title('Failures Proportion by Institution type', fontsize=20)
plt.show();
When it comes to monetary losses, the Washington Mutual Bank had the highest deposits (188 Billion) and assets (307 Billion).
The highest amount estimated loss belongs to IndyMac Bank that reported 12 Billion in losses.
print('The highest amount in deposits was',banks['Total Deposits'].max(),
'in the',banks.loc[banks['Total Deposits'].idxmax()]['Institution Name'])
print('The highest amount in assets was',banks['Total Assets'].max(),
'in the',banks.loc[banks['Total Assets'].idxmax()]['Institution Name'])
print('The highest amount lost in Estimated Losses was',banks['Estimated Loss (2015)'].max(),
'in the',banks.loc[banks['Estimated Loss (2015)'].idxmax()]['Institution Name'])
estimated_losses = banks.groupby(['year'])[["Estimated Loss (2015)",
"Total Assets", "Total Deposits"]].sum()
pd.set_option('display.float_format', lambda x: '%.3f' % x)
estimated_losses.describe()
I will log the values of Assets, Deposits and Estimated Losses so I can accomodate skewness towards large values.
As we can see in the graph above, the minimum loss is only about 316 thousand, whereas the maximum is 371 Billion.
estimated_losses['Estimated Loss (2015)'] = np.log(estimated_losses['Estimated Loss (2015)'])
estimated_losses['Total Assets'] = np.log(estimated_losses['Total Assets'])
estimated_losses['Total Deposits'] = np.log(estimated_losses['Total Deposits'])
estimated_losses.plot(color=sns.color_palette('Set2',12),figsize=(15,8))
fig=plt.gcf()
plt.title('Chronological map of Assets, Deposits and Estimated Losses', fontsize=14)
plt.ylabel('Lof of Losses')
plt.xlabel('Year')
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
fig.set_size_inches(18,6)
plt.show()
Below are the commercial banks that reported to be bankrupt in 2008 and the institutions that acquired them.
banks_2008 = banks[banks['year'] == 2008]
Below are the institutions that were bankrupted and who acquired its assets: