def calculate(model_name, portfolio_url): print(model_name) # Exctract exposure data for calculation portfolio_raw = get_data(portfolio_url) portfolio_list = [] for entry in portfolio_raw['_items']: portfolio_list.append(entry['EAD']) portfolio = np.array(portfolio_list) weights = cl.get_weights(portfolio) if model_name == 'shannon': value = cl.shannon(weights) elif model_name == 'hhi': value = cl.hhi(weights) return {"result": value}
def calculate_index(model_name, exposures): # Step 1: Calculate positions weights weights = cl.get_weights(exposures) # Step 2: Calculate index if model_name == 'Shannon_Index': value = cl.shannon(weights) elif model_name == 'HHI_Index': value = cl.hhi(weights) elif model_name == 'Gini_Index': value = cl.gini(weights) return {model_name: value}
def test_hhi(self): vector = np.ones(10) self.assertTrue(abs(cl.hhi(vector) - 0.0) < ERROR_MARGIN)
def test_hhi(self): portfolio = np.ones(10) portfolio = sorted(portfolio, reverse=True) weights = cl.weights(portfolio) self.assertTrue(abs(cl.hhi(weights) - 0.0) < ERROR_MARGIN)
from scipy import special import numpy as np import matplotlib.pyplot as plt import concentration_library as cl if __name__ == "__main__": # generate portfolio data (list) # for some realism we use the Zipf power law a = 1.7 # zipf parameter x = [] y = [] for iter in range(0, 10000): # portfolio simulations # Generate a portfolio of 100 entities portfolio = np.random.zipf(a, 100) portfolio = sorted(portfolio, reverse=True) weights = cl.get_weights(portfolio) # Compute HHI and Gini indexes hhi = cl.hhi(weights) gini = cl.gini(weights) x.append(hhi) y.append(gini) # Plot values of HHI against Gini plt.style.use(['dark_background', 'ggplot']) plt.title('HHI versus Gini for random portfolios') plt.ylabel('Gini Index') plt.xlabel('Herfindahl-Hirschman Index') plt.scatter(y, x) plt.show()