带有列表元素列表的Python字典

时间:2019-03-08 01:46:46

标签: python

编辑:对不起-基本上所有这些我都没有经验。我会再试一次。

看来我的字典有些混乱,因为当我调用该函数时,大多数结果是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))

0 个答案:

没有答案