编辑:对不起-基本上所有这些我都没有经验。我会再试一次。
看来我的字典有些混乱,因为当我调用该函数时,大多数结果是nan
除了以下内容外,如果您还需要其他任何信息,请告诉我,我几乎不知道如何编写代码,我当然也不知道如何修复其他人的代码,所以请让我知道您可能需要的其他信息。 / p>
N_SAMPLES = 10000
IEA_LV = fin_data['Yield_IEA'][0]
IEA_STD = fin_data['Yield_IEA'].std()
IBL_LV = fin_data['Cost_IBL'][0]
IBL_STD = fin_data['Cost_IBL'].std()
# Proxy for Default Rate- See Notes
fin_data['NPL'] = fin_data['NPL_to_Loan']*fin_data['Total_Loans']
NPL_LV = fin_data['NPL'][0]
# default rate info (based on past due loans)
default_mean = fin_data['Default_Rate'].mean()
default_std = fin_data['Default_Rate'].std()
LGD = fin_data['LGD'][0]
prior_LGD = fin_data['LGD'][1]
fin_data['non_int_exp_toAssets'] = fin_data['Non_Int_Exp']/fin_data['Total_Loans']
# non-interest expense info
nonint_exp_LV = fin_data['non_int_exp_toAssets'][0]
nonint_exp_STD = fin_data['non_int_exp_toAssets'].std()
#deposit info
dep_LV = fin_data['Deposits'][0]
dep_STD = fin_data['Deposits'].std()
dep_min = fin_data['Deposits'].min()
# Loan growth information
fin_data['loan_g'] = fin_data['Total_Loans']/fin_data['Total_Loans'].shift(-1) - 1
loan_g_min = fin_data['loan_g'].min()
loan_g_avg = fin_data['loan_g'].mean()
loan_g_std = fin_data['loan_g'].std()
w_minus_r = fin_data['Net_Chg_Off'].mean()
def_credit_flow = default_mean*fin_data['Total_Loans'][0]
# Projected NPLs
next_NPL = NPL_LV + def_credit_flow + NPL_LV * (1 - w_minus_r)
#Net adjustment for impaired loans needs LGD updated
adj_imp_loans = def_credit_flow * LGD + NPL_LV * (1-w_minus_r) * (LGD - prior_LGD)
# Reserve for Loan Loss
ALLL = fin_data['ALLL'][0] * fin_data['Total_Loans'][0] + adj_imp_loans - NPL_LV * w_minus_r
# variable: [most recent value or average, standard deviation]
var_stats_dict = {'IEA': [IEA_LV, IEA_STD], 'IBL': [IBL_LV, IBL_STD], 'Default Rate': [default_mean, default_std],
'Non Int Exp': [nonint_exp_LV, nonint_exp_STD],
'GPL': [loan_g_avg, loan_g_std], 'Deposits': [dep_LV, dep_STD]}
# var: [[min, max for severe], [min, max for moderate], [min, max for low]]
# severe = 0, moderate = 1, low = 2
severity_dict = {'IEA': [[IEA_LV - 3 * IEA_STD, IEA_LV + 1 * IEA_STD],
[IEA_LV - 2 * IEA_STD, IEA_LV + 2 * IEA_STD],
[IEA_LV - 1 * IEA_STD, IEA_LV + 3 * IEA_STD]],
'IBL': [[IBL_LV - 1 * IBL_STD, IBL_LV + 3 * IBL_STD],
[IBL_LV - 2 * IBL_STD, IBL_LV + 2 * IBL_STD],
[IBL_LV - 3 * IBL_STD, IBL_LV + 1 * IBL_STD]],
'Default Rate': [[default_mean - 1 * default_std,
default_mean + 3 * default_std],
[default_mean - 2 * default_std,
default_mean + 2 * default_std],
[default_mean - 3 * default_std,
default_mean + 1 * default_std]],
'Non Int Exp': [nonint_exp_LV - 1 * nonint_exp_STD,
nonint_exp_LV + 1 * nonint_exp_STD],
'GPL': [[loan_g_min, loan_g_avg],
[loan_g_avg - 1 * loan_g_std, loan_g_avg + 1 * loan_g_std],
[loan_g_avg, loan_g_avg + 2 * loan_g_std]],
'Deposits': [[dep_min, dep_LV],
[dep_LV - 1 * dep_STD, dep_LV + 1 * dep_STD],
[dep_LV, dep_LV + 2 * dep_STD]]}
#vars = IEA, IBL, Default Rate, Non Int Exp, GPL, Deposits
def mc_generator(var, severity):
low_cap = severity_dict[var][severity][0]
up_cap = severity_dict[var][severity][1]
mu = var_stats_dict[var][0]
sigma = var_stats_dict[var][1]
container = []
for i in range(0, N_SAMPLES):
x = np.random.normal(loc = mu, scale = sigma)
result = stats.beta.pdf(x, low_cap, up_cap)
container.append(result)
avg_val = sum(container)/N_SAMPLES
return round(avg_val, 10)
print(mc_generator('Non Int Exp', 0))