Skip to content

Commit

Permalink
full synthetic workflow
Browse files Browse the repository at this point in the history
various changes
  • Loading branch information
bergalli committed Jan 26, 2024
1 parent e976b3e commit 539a2aa
Show file tree
Hide file tree
Showing 43 changed files with 303,376 additions and 479 deletions.
2 changes: 2 additions & 0 deletions .Renviron
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PYTHON_BIN="/Users/bertrandgallice/opt/miniconda3/envs/mlflow_env/bin/python"
PYTHON_MLFLOW_BIN=""/Users/bertrandgallice/opt/miniconda3/envs/mlflow_env/bin/mlflow""
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@
drafts/
legacy/
documentation/
data-raw/
inst/doc
/doc/
/Meta/
workspace/

data-raw/mlflow_outputs/
3 changes: 3 additions & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3
Imports:
2DegreesInvesting/r2dii.climate.stress.test,
2DegreesInvesting/STDataMGMT,
box,
dplyr,
forcats,
ggplot2,
Expand Down
18 changes: 4 additions & 14 deletions R/data_load_crispy.R
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
#' Title
#'
#' @param crispy_outputs_dir
#'
#' @return
#' @export
#'
#' @examples

load_multiple_crispy <- function(crispy_outputs_dir, max_granularity) {
# Required Libraries

Expand Down Expand Up @@ -56,16 +49,13 @@ load_multiple_crispy <- function(crispy_outputs_dir, max_granularity) {
#'
#' # TODO FIND CLOSEST COMPANY IF group_cols=NULL
#'
#' @param multi_crispy
#' @param group_cols
#' @param multi_crispy multi_crispy
#' @param group_cols group_cols
#' @param param_cols TODO the parameters should be stored in a dataframe other than crispy and use the run_id as key to join
#'
#' @return
#'
#' @examples
aggregate_crispy_facts <- function(multi_crispy, group_cols, param_cols = c(
"run_id", "roll_up_type","scenario_geography","baseline_scenario",
"shock_scenario","lgd","risk_free_rate","discount_rate","div_netprofit_prop_coef",
"shock_scenario","risk_free_rate","discount_rate","div_netprofit_prop_coef",
"carbon_price_model","market_passthrough","financial_stimulus","start_year",
"growth_rate","shock_year")
) {
Expand Down
20 changes: 4 additions & 16 deletions R/data_load_portfolio.R
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
#' Title
#'
#' @param portfolio_data_path
#'
#' @return
#' @export
#'
#' @examples
load_portfolio_data <- function(portfolio_data_path) {
if (!is.null(portfolio_data_path)) {
portfolio_data <- readr::read_csv(
Expand Down Expand Up @@ -42,16 +34,12 @@ load_portfolio_data <- function(portfolio_data_path) {
}


#' Title
#' Convert column year to term
#'
#' @param portfolio_data
#' @param maturity_month_term_bridge
#' @param start_year
#' @param portfolio_data portfolio_data
#' @param maturity_month_term_bridge maturity_month_term_bridge
#' @param start_year start_year
#'
#' @return
#' @export
#'
#' @examples
map_portfolio_maturity_to_term <-
function(portfolio_data,
maturity_month_term_bridge,
Expand Down
17 changes: 5 additions & 12 deletions R/data_preproc_analysis.R
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
#' Title
#'
#' @param portfolio_data
#' @param multi_crispy
#'
#' @return
#'
#' @examples

create_analysis_data <-
function(portfolio_data,
multi_crispy_data,
Expand Down Expand Up @@ -51,17 +44,17 @@ compute_analysis_metrics <- function(analysis_data) {
dplyr::mutate(
net_present_value_difference = .data$crispy.net_present_value_shock - .data$crispy.net_present_value_baseline,
crispy_perc_value_change = .data$net_present_value_difference / .data$crispy.net_present_value_baseline,
crispy_value_loss = .data$crispy_perc_value_change * .data$portfolio.exposure_value_usd,
crispy_value_loss = .data$crispy_perc_value_change * .data$exposure_value_usd,

exposure_at_default = .data$portfolio.exposure_value_usd * .data$portfolio.loss_given_default,
exposure_at_default = .data$exposure_value_usd * .data$loss_given_default,
# exposure_at_default_baseline = .data$net_present_value_baseline * .data$loss_given_default,
# exposure_at_default_shock = .data$net_present_value_shock * .data$loss_given_default,

expected_loss_portfolio = .data$exposure_at_default * .data$portfolio.pd_portfolio,
expected_loss_portfolio = .data$exposure_at_default * .data$pd_portfolio,
expected_loss_baseline = .data$exposure_at_default * .data$crispy.pd_baseline,
expected_loss_shock = .data$exposure_at_default * .data$crispy.pd_shock,

# pd_difference_portfolio = .data$portfolio.pd_portfolio - .data$crispy.pd_shock,
# pd_difference_portfolio = .data$pd_portfolio - .data$crispy.pd_shock,
pd_difference = .data$crispy.pd_shock - .data$crispy.pd_baseline,
crispy_perc_pd_change = .data$pd_difference / .data$crispy.pd_baseline
)
Expand Down
6 changes: 3 additions & 3 deletions R/draw_cdi_plots.R
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ make_mean_pd_diff_plot <- function(data_cdi_pd_plot, scenario_name_for_title) {
labels = scales::comma,
name = "Mean pd_difference"
) +
facet_grid( ~ portfolio.ald_sector, scales = "free_y") + # Allow separate scales for y-axis
facet_grid( ~ ald_sector, scales = "free_y") + # Allow separate scales for y-axis
theme_2dii() +
labs(x = "Shock_Year", y = "Mean pd_difference", title = paste("Mean PD Difference by Shock Year -", scenario_name_for_title))
# theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 28), # Adjust title size
Expand Down Expand Up @@ -116,7 +116,7 @@ make_discount_rate_plot <- function(plot_data, scenario_name_for_title, y_var) {
labels = scales::comma,
name = "Mean pd_difference"
) +
facet_grid( ~ portfolio.ald_sector, scales = "free_y") + # Allow separate scales for y-axis
facet_grid( ~ ald_sector, scales = "free_y") + # Allow separate scales for y-axis
theme_2dii() +
labs(x = "Discount Rate", y = "Mean pd_difference", title = paste("Mean PD Difference by Discount Rate -", scenario_name_for_title))
# theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 24), # Adjust title size
Expand All @@ -142,7 +142,7 @@ make_discount_rate_plot <- function(plot_data, scenario_name_for_title, y_var) {
#' @export
#'
#' @examples
make_density_plots <- function(data_cdi_pd_plot, numeric_values, density_var, group_variable="portfolio.ald_sector") {
make_density_plots <- function(data_cdi_pd_plot, numeric_values, density_var, group_variable="ald_sector") {

density_var_values <- unique(data_cdi_pd_plot[[density_var]])
plots <- list()
Expand Down
94 changes: 70 additions & 24 deletions R/main_data_load.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,81 @@
#' The dataframe in output of this function should always be
#' the one used as input for the plots preprocessing functions
#'
#' @param crispy_outputs_dir
#' @param portfolio_data_path
#' @param granularity
#' @param maturity_month_term_bridge_fp
#' @param crispy_outputs_dir crispy_outputs_dir
#' @param portfolio_data_path portfolio_data_path
#' @param granularity granularity
#' @param maturity_month_term_bridge_fp see in data-raw in the source package
#' @param trisk_start_year (default) sets to the earliest year of multi_cripy_data
#'
#' @return
#' @export
#'
#' @examples
load_input_plots_data <-
load_input_plots_data_from_files <-
function(crispy_outputs_dir,
portfolio_data_path = NULL,
granularity = c("company_id", "company_name", "ald_sector", "ald_business_unit"),
maturity_month_term_bridge_fp = here::here("data", "maturity_month_term_bridge.csv"),
trisk_start_year = 2022) {
trisk_start_year = NA) {

multi_crispy_data <-
load_multiple_crispy(crispy_outputs_dir = crispy_outputs_dir) |>
main_load_multi_crispy_data(
max_crispy_granularity =
c("run_id", "term", "scenario_geography", granularity)
)

portfolio_data <- load_portfolio_data(portfolio_data_path) |>
main_load_portfolio_data(
maturity_month_term_bridge_fp = maturity_month_term_bridge_fp,
max_portfolio_granularity = c("portfolio_id", "term", granularity),
trisk_start_year = min(multi_crispy_data$year)
)

analysis_data <-
main_load_analysis_data(
portfolio_data = portfolio_data,
multi_crispy_data = multi_crispy_data,
portfolio_crispy_merge_cols = c("term", granularity)
)

return(analysis_data)
}

#' Data load function to generate plots
#'
#' @description
#' The dataframe in output of this function should always be
#' the one used as input for the plots preprocessing functions
#'
#' @param crispy_outputs_dir crispy_outputs_dir
#' @param portfolio_data_path portfolio_data_path
#' @param granularity granularity
#' @param maturity_month_term_bridge_fp see in data-raw in the source package
#' @param trisk_start_year (default) sets to the earliest year of multi_cripy_data
#'
#' @return
#' @export
#'
load_input_plots_data_from_tibble <-
function(multi_crispy_data,
portfolio_data = tibble::tibble(),
granularity = c("company_id", "company_name", "ald_sector", "ald_business_unit"),
maturity_month_term_bridge_fp = here::here("data", "maturity_month_term_bridge.csv"),
trisk_start_year = NA) {

multi_crispy_data <-
multi_crispy_data |>
main_load_multi_crispy_data(
crispy_outputs_dir = crispy_outputs_dir,
max_crispy_granularity =
c("run_id", "term", "scenario_geography", granularity)
)

portfolio_data <-
portfolio_data |>
main_load_portfolio_data(
portfolio_data_path = portfolio_data_path,
maturity_month_term_bridge_fp = maturity_month_term_bridge_fp,
max_portfolio_granularity = c("portfolio_id", "term", granularity),
trisk_start_year = trisk_start_year
trisk_start_year = min(multi_crispy_data$year)
)

analysis_data <-
Expand All @@ -44,17 +91,18 @@ load_input_plots_data <-
return(analysis_data)
}


#' Title
#'
#'
#'
#' @param multi_crispy
#' @param portfolio_data
#' @param portfolio_crispy_merge_cols
#' @param multi_crispy multi_crispy
#' @param portfolio_data portfolio_data
#' @param portfolio_crispy_merge_cols portfolio_crispy_merge_cols
#'
#' @return
#'
#' @examples
#' @export
main_load_analysis_data <-
function(multi_crispy_data,
portfolio_data,
Expand All @@ -71,17 +119,16 @@ main_load_analysis_data <-

#' Title
#'
#' @param max_portfolio_granularity
#' @param max_portfolio_granularity max_portfolio_granularity
#'
#' @return
#'
#' @examples
#' @export
main_load_portfolio_data <-
function(portfolio_data_path,
function(portfolio_data,
maturity_month_term_bridge_fp,
max_portfolio_granularity,
trisk_start_year) {
portfolio_data <- load_portfolio_data(portfolio_data_path)
maturity_month_term_bridge <- readr::read_csv(maturity_month_term_bridge_fp)

portfolio_data <- portfolio_data |>
Expand All @@ -96,17 +143,16 @@ main_load_portfolio_data <-

#' Title
#'
#' @param crispy_outputs_dir
#' @param max_crispy_granularity
#' @param crispy_outputs_dir crispy_outputs_dir
#' @param max_crispy_granularity max_crispy_granularity
#'
#' @return
#'
#' @examples
#' @export
main_load_multi_crispy_data <-
function(crispy_outputs_dir,
function(multi_crispy_data,
max_crispy_granularity) {
multi_crispy_data <-
load_multiple_crispy(crispy_outputs_dir = crispy_outputs_dir) |>
multi_crispy_data <- multi_crispy_data |>
aggregate_crispy_facts(group_cols = max_crispy_granularity)
return(multi_crispy_data)
}
Loading

0 comments on commit 539a2aa

Please sign in to comment.