0% ont trouvé ce document utile (0 vote)
6 vues3 pages

Analyse d'efficience bancaire RDM

Le document décrit un processus d'analyse de l'efficacité des banques à l'aide d'un modèle de programmation linéaire. Il commence par l'importation et la préparation des données, suivies du calcul des plages d'amélioration pour les inputs et outputs. Ensuite, il applique le modèle RDM à chaque banque, extrait les scores d'efficacité et sauvegarde les résultats dans un fichier CSV.

Transféré par

Kingtay
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues3 pages

Analyse d'efficience bancaire RDM

Le document décrit un processus d'analyse de l'efficacité des banques à l'aide d'un modèle de programmation linéaire. Il commence par l'importation et la préparation des données, suivies du calcul des plages d'amélioration pour les inputs et outputs. Ensuite, il applique le modèle RDM à chaque banque, extrait les scores d'efficacité et sauvegarde les résultats dans un fichier CSV.

Transféré par

Kingtay
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

# Charger les packages nécessaires

library(readxl)
library(dplyr)
library(lpSolve)

## Étape 1: Importer et préparer les données


# Supposons que vos données sont dans un fichier Excel nommé "bank_data.xlsx"
# avec une feuille nommée "Data"
data <- read_excel("bank_data.xlsx", sheet = "Data")

# Afficher la structure des données pour vérification


str(data)

# Sélectionner les variables nécessaires


# Inputs: charges, total_actifs, fonds_propres, credits, depots
# Output: resultat_net
# (Adaptez ces noms selon vos colonnes réelles)
inputs <- data %>% select(charges, total_actifs, fonds_propres, credits, depots)
outputs <- data %>% select(resultat_net)

# Convertir en matrices pour les calculs


X <- [Link](inputs) # Matrice des inputs
Y <- [Link](outputs) # Matrice des outputs

# Nombre de DMUs (banques) et variables


n <- nrow(X)
m <- ncol(X) # nombre d'inputs
s <- ncol(Y) # nombre d'outputs

## Étape 2: Calculer les ranges d'amélioration (comme dans l'article)


# Pour les outputs: max(y_rj) - y_ro
R_y <- matrix(rep(apply(Y, 2, max), n, s, byrow = TRUE) - Y

# Pour les inputs: x_io - min(x_ij)


R_x <- X - matrix(rep(apply(X, 2, min), n), n, m, byrow = TRUE)

# Pour les variables avec range = 0, on les fixe à 0 (comme dans l'article)
R_y[R_y < 0] <- 0
R_x[R_x < 0] <- 0

## Étape 3: Fonction pour résoudre le modèle RDM pour une DMU


solve_rdm <- function(dmu, X, Y, R_x, R_y, orientation = "non-oriented") {
# dmu: indice de la DMU à évaluer
# orientation: "input", "output" ou "non-oriented" (par défaut)

n <- nrow(X)
m <- ncol(X)
s <- ncol(Y)

# Coefficients de la fonction objectif (max beta)


[Link] <- c(1, rep(0, n)) # beta, puis les lambda

# Contraintes
# 1. Contraintes outputs: sum(lambda_j * y_rj) >= y_ro + beta * R_ro
# 2. Contraintes inputs: sum(lambda_j * x_ij) <= x_io - beta * R_io
# 3. Contrainte de convexité: sum(lambda_j) = 1

# Construction de la matrice des contraintes


# Partie gauche: -beta * R + sum(lambda * Y) pour outputs
output_constr <- cbind(-R_y[dmu, ], t(Y))

# Partie gauche: beta * R + sum(lambda * X) pour inputs


input_constr <- cbind(R_x[dmu, ], -t(X))

# Combiner toutes les contraintes


[Link] <- rbind(
output_constr,
input_constr,
c(0, rep(1, n)) # Contrainte de convexité

# Sens des contraintes


[Link] <- c(
rep(">=", s), # Pour les outputs
rep("<=", m), # Pour les inputs
"==") # Pour la convexité

# Partie droite des contraintes


[Link] <- c(
Y[dmu, ], # Pour les outputs
X[dmu, ], # Pour les inputs
1) # Pour la convexité

# Gérer l'orientation
if (orientation == "input") {
# Modèle orienté input: pas d'expansion des outputs (R_y = 0)
[Link][1:s, 1] <- 0
} else if (orientation == "output") {
# Modèle orienté output: pas de réduction des inputs (R_x = 0)
[Link][(s+1):(s+m), 1] <- 0
}

# Résoudre le problème de programmation linéaire


lp_result <- lp("max", [Link], [Link], [Link], [Link])

# Récupérer les résultats


beta <- lp_result$solution[1]
lambda <- lp_result$solution[-1]

# Calculer les targets


targets_x <- X[dmu, ] - beta * R_x[dmu, ]
targets_y <- Y[dmu, ] + beta * R_y[dmu, ]

# Score d'efficience (1 - beta)


efficiency <- 1 - beta

# Retourner les résultats


return(list(
efficiency = efficiency,
beta = beta,
lambda = lambda,
targets_x = targets_x,
targets_y = targets_y,
status = lp_result$status
))
}

## Étape 4: Appliquer le modèle RDM à toutes les DMUs


# Nous utilisons une orientation "output" comme dans l'étude bancaire
results <- lapply(1:n, function(i) {
solve_rdm(i, X, Y, R_x, R_y, orientation = "output")
})

# Extraire les scores d'efficience


efficiency_scores <- sapply(results, function(x) x$efficiency)

# Créer un data frame avec les résultats


results_df <- [Link](
DMU = 1:n,
Efficiency = efficiency_scores,
Beta = sapply(results, function(x) x$beta)
)

# Ajouter les targets


targets_x <- t(sapply(results, function(x) x$targets_x))
colnames(targets_x) <- paste0("Target_", colnames(X))
targets_y <- t(sapply(results, function(x) x$targets_y))
colnames(targets_y) <- paste0("Target_", colnames(Y))

results_df <- cbind(results_df, targets_x, targets_y)

# Identifier les DMUs efficientes (efficiency = 1)


efficient_dmus <- which(results_df$Efficiency == 1)

## Étape 5: Analyse des résultats


# Afficher les scores d'efficience
print(results_df %>% arrange(desc(Efficiency)))

# Statistiques descriptives
summary(results_df$Efficiency)

# Histogramme des scores d'efficience


hist(results_df$Efficiency,
main = "Distribution des scores d'efficience RDM",
xlab = "Score d'efficience",
ylab = "Nombre de banques",
col = "lightblue")

## Étape 6: Sauvegarder les résultats


[Link](results_df, "rdm_efficiency_results.csv", [Link] = FALSE)

Vous aimerez peut-être aussi