Credit Crunch and Bank Failure

No preview image

1 collaborator

Default-person Binyang Xu (Author)


(This model has yet to be categorized with any tags)
Model group EECS 372-Spring 2011 | Visible to everyone | Changeable by the author
Model was written in NetLogo 4.1.3 • Viewed 664 times • Downloaded 47 times • Run 12 times
Download the 'Credit Crunch and Bank Failure' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


This model attempts to explain the 2007-2010 financial crisis by exploring the interaction between banks and consumers (borrowers). A common hypothesis is that the financial crisis occurred largely because of a burst in the housing bubble. A large number of borrowers were granted loans who should not have been. "Sub-prime mortgages" were used by banks when it was clear many of the people who took out these mortgages would be unable to pay them back. Therefore, when the inevitable happened and some borrowers defaulted on their loans, available credit went down as banks lost money.

Furthermore, this model tests the roll of bank interconnectivity in the financial collapse. Not only do banks vary in their willingness to take on high risk borrowers, they also vary in how many interbank loans they have taken or given. Another curious phenomenon of the financial crisis was how quickly the failure of one bank led to a cascading effect that took down other banks, in the form of loss of reserves due to interbank loans that were lost when a borrowing bank failed.


Borrowers attempt to seek loans from banks. They search for banks with a certain level of prestige - these banks are better connected and generally only serve more reliable borrowers. Banks deny or grant loans based on the borrower's perceived reliability at repaying the loan. If a borrower is unable to secure a loan, they lower their standards for how prestigious a bank they wish to borrow from.

When a loan has been established between a consumer and a bank, there is then a chance that the consumer either pays it back, with interest, or defaults on the loan, which causes the bank to lose a portion of its reserves. Once a bank's reserves go below 0, then the bank fails and all banks that it has taken an interbank loan from lose money from their reserves as well.


There are many setup settings for the model, but it should not seem intimidating. The number of banks can be set with bank-count, but it is generally only useful for simulating greater levels of bank connectivity.

The property neg-reliability-mod dictates how unreliable on a whole the population will be. A higher value leads to a population of consumers who are unlikely to be able to pay off their loans.

Bank-connectivity dictates how interconnected and thus interdependent the network of banks is. At the minimum, each bank will have granted one interbank loan to one other bank. Higher levels of interconnectivity represent more loans granted.

Reserve-amount helps determine how much money each bank has in its reserves to start.

Loan-amount determines how large the loans granted by the banks are. This can have the effect of exacerbating the negative effect of defaulting on loans.

If you think of bank-connectivity as a measure of the breadth of interdependent networking between banks, then you can think of interbank-loan-amount as determining the magnitude or importance of these interdependent links. The larger this amount, the more money a bank will lose when a bank it has granted a loan to fails.

Bank-risk-taking is an attempt to simulate the notion that banks might be more receptive to giving out bad loans (sub-prime mortgages). This helps explore the idea that a lack of regulation caused banks to give out loans they should not have. At a higher level of risk-taking, banks are more likely to give out loans they don't believe will be paid back.

The layout switch exists for purely aesthetic reasons. It uses the same code as the Preferential Attachment model for making the network easier to look at.


When watching the plots that show the number of remaining banks and the total amount of money lost in the financial crisis, pay attention to the slope of the line. The model fairly well matches with empirical data that suggests there is an accelerating or cascading effect of bank failures.

Also pay attention to how different configurations of interbank loans generated at setup can create different results despite the value for bank connectivity remaining the same. The sheer number of connections is important, but so is the layout of those connections.


By far the most interesting variable to play with is the bank-connectivity. Try varying this setting at different static amounts of neg-reliability-mod or bank-risk-taking. Why does this have such a large effect on bank failures compared changes to the commonly theorized causes of the financial crisis?


This model is a simplification of the financial crisis and does not take into account how hedge funds work or the specific intricacies of interbank loans. One notable way to make the model more accurate would be to split up the bank's reserves into assets and liabilities and introducing the idea of external shocks to the system rather than having bad borrowers being the only catalysts for bank failure.


The procedure for determining what bank a consumer aims at borrowing from as well as whether the bank will grant a loan to that consumer relies heavily upon the "myself" function to compare properties between banks and consumers.

Directed links are necessary to represent interbank loans. Undirected links are inadequate for that task because they cannnot represent who is the lender and who is the borrower. This is not important for loans between banks and consumers because all of the loans go in one direction anyway.


There are multiple models in the library that are relevant to this one, including a Bank Reserves model. However, these economic models tend to be in the unverified folder of the Social Science folder.


This section could contain a reference to the model's URL on the web if it has one, as well as any other necessary credits or references.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

breed [banks bank]
breed [consumers consumer]

undirected-link-breed [loanlinks loanlink]

directed-link-breed [interbankloans interbankloan]

globals [totalloss]

banks-own [
  bank-reserves ;;the amount of money a bank has
  initial-reserves ;;initial reserves a bank has - used to calculate total losses of money from bank failure
  bank-prestige ;;this is a simplified property that denotes multiple characteristics of a bank. First of all, it denotes 
                ;;a bank's standards for borrowers, basically whether or not a bank is willing to take on a high risk customer. The higher the value, the less likely.
                ;;Secondly, it is a measure of the bank's desirability to borrowers. They will seek a bank that is known to be more stable. 
                ;;Finally, it denotes the level of connectivity the bank has with other banks, both in terms of loans taken and loans granted. This is because
                ;;prestigious banks tend to be well-connected with others. 

consumers-own [
  reliability ;;a consumer's ability to pay back loans
  loan ;;the amount a consumer has taken out in loans from a bank
  consumer-standard ;;the higher this value, the more prestigious a bank the borrower will attempt to acquire a loan from. This value is presumed to be independent of one's ability to pay
                    ;;back a loan, thus it is not correlated with reliability in this model. 

to setup

to setup-banks
  create-banks bank-count [set bank-reserves random reserve-amount + 10
    set shape "circle" 
    set color red 
    set bank-prestige random 100 
    move-to one-of patches
    set initial-reserves bank-reserves] ;;Although the banks are randomly placed spatially, this is only for the sake of appearance. It does not affect the model's performance as everything is done
                            ;;with a network topology.

to setup-consumers
  create-consumers 100 + bank-count [set reliability random 100 - neg-reliability-mod ;;this is here to simulate the notion that the pool of lenders as a whole has gotten more unreliable, which is the case according to some economists
    set consumer-standard random 100
    set shape "sheep" 
    set color blue
    move-to one-of patches] ;;Same comment with banks applies here. For the sake of simplicity, spatial distance is not a consideration for consumers when choosing a bank.
                            ;;Given that the banks heavily implicated in the financial crisis were large and ubiquitous, this is not an unreasonable assumption.

to network-banks
ask banks [create-interbankloan-to one-of other banks]
repeat bank-connectivity [ask banks [if random 100 < bank-prestige [create-interbankloan-to one-of other banks]]] 
;;Every bank has at least one loan with another bank. An overall measure of connectivity is then used to determine how many additional loans exist between banks. 

to go
if not any? banks [stop]
if not any? consumers [stop]
ask banks [if bank-reserves <= 0 [bank-failure]] ;;banks fail when they're out of reserves
ask consumers [seek-loan]
ask consumers [check-loan]
if layout? [layout]

to seek-loan
  if count my-loanlinks = 0 [network-with-bank]

to network-with-bank ;;this is the command that will make a consumer try to create a loan with a bank, depending on their preferences
  if count banks > 0 [
  if loan = 0 [ask my-links [die]
  ifelse any? banks with [bank-prestige >= ([consumer-standard] of myself)] 
  [ask one-of banks with [bank-prestige >= ([consumer-standard] of myself) ] [if random 100 + ([reliability] of myself) > (bank-prestige - bank-risk-taking) [create-loanlink-with myself]]
  set loan loan-amount]
  [set consumer-standard consumer-standard - 2]]] ;;standards lower over time as consumers realize they will not be able to find their ideal bank

to check-loan
  if count my-links > 0 [if random 100 > 75 [ifelse random 100 > reliability + 30 [if count my-links > 0 [ask one-of loanlink-neighbors [loseloan]set loan 0 die]]
    [ask loanlink-neighbors [regainloan] ask my-links [die] if random 100 > 50 [die]]]] ;;the random chance of dying is to gradually remove repeat-borrowers from the pool. 
                                                                                        ;;it isn't realistic that someone would take out repeated loans

to regainloan
  set bank-reserves bank-reserves + loan-amount + 1 ;;extra 1 here is to represent repaid interest on a loan

to loseloan
set bank-reserves bank-reserves - loan-amount

to bank-failure
ask out-link-neighbors [set bank-reserves bank-reserves - interbank-loan-amount set totalloss totalloss + initial-reserves] ;;As a bank fails, all banks it was taking loans from suffer as the loan                                                                                                                ;;is defaulted upon

to make-plot
  set-current-plot "bank count"
  set-current-plot-pen "default"
  plot count banks

to make-plot2
  set-current-plot "total losses"
  set-current-plot-pen "default2"
  plot totalloss

;;Following code is cannibalized from Preferential Attachment for the sake of making the network here look more aesthetically pleasing.   

to layout
  ;; the number 3 here is arbitrary; more repetitions slows down the
  ;; model, but too few gives poor layouts
  repeat 3 [
    ;; the more turtles we have to fit into the same amount of space,
    ;; the smaller the inputs to layout-spring we'll need to use
    let factor sqrt count turtles
    ;; numbers here are arbitrarily chosen for pleasing appearance
    layout-spring turtles links (1 / factor) (7 / factor) (1 / factor)
    display  ;; for smooth animation
  ;; don't bump the edges of the world
  let x-offset max [xcor] of turtles + min [xcor] of turtles
  let y-offset max [ycor] of turtles + min [ycor] of turtles
  ;; big jumps look funny, so only adjust a little each time
  set x-offset limit-magnitude x-offset 0.1
  set y-offset limit-magnitude y-offset 0.1
  ask turtles [ setxy (xcor - x-offset / 2) (ycor - y-offset / 2) ]

to-report limit-magnitude [number limit]
  if number > limit [ report limit ]
  if number < (- limit) [ report (- limit) ]
  report number

There is only one version of this model, created almost 8 years ago by Binyang Xu.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.