Habilitación del ciclo de vida de riesgos de los servicios financieros con Azure y REnabling the financial services risk lifecycle with Azure and R

Los cálculos de riesgos son fundamentales en varias etapas del ciclo de vida de operaciones de servicio financieros clave.Risk calculations are pivotal at several stages in the lifecycle of key financial services operations. Por ejemplo, una forma simplificada del ciclo de vida de la administración de productos de seguros puede tener un aspecto similar al diagrama siguiente.For example, a simplified form of the insurance product management lifecycle might look something like the diagram below. Los aspectos del cálculo de riesgos se muestran con el texto azul.The risk calculation aspects are shown in blue text.

Un escenario en una empresa dedicada a los mercados de capitales puede tener el siguiente aspecto:A scenario in a capital markets firm might look like this:

A través de estos procesos, hay necesidades comunes en torno al modelado de riesgo que incluyen las siguientes:Through these processes there are common needs around risk modelling including:

  1. La necesidad de una experimentación ad hoc relacionada con los riesgos por parte de los analistas de riesgos, los actuarios de una entidad aseguradora o los analistas cuantitativos de una empresa dedicada a los mercados de capitales.The need for ad-hoc risk-related experimentation by risk analysts; actuaries in an insurance firm or quants in a capital markets firm. Habitualmente, estos analistas trabajan con herramientas de modelado y código populares en sus dominios: R y Python.These analysts typically work with code and modelling tools popular in their domain: R and Python. Muchos programas de estudios universitarios incluyen cursos de R o Python relacionados con las finanzas matemáticas y en cursos de MBA.Many university curriculums include training in R or Python in mathematical finance and in MBA courses. Ambos lenguajes ofrecen una amplia variedad de bibliotecas de código abierto que admiten los cálculos de riesgos populares.Both languages offer a wide range of open source libraries which support popular risk calculations. Junto con las herramientas adecuadas, los analistas a menudo necesitan acceso a:Along with appropriate tooling, analysts often require access to:

    a.a. Datos precisos sobre los precios de mercado.Accurate market pricing data.

    b.b. Datos de reclamaciones y directivas existentes.Existing policy and claims data.

    c.c. Datos existentes de la posición de mercado.Existing market position data.

    d.d. Otros datos externos.Other external data. Los orígenes incluyen datos estructurados, como tablas de mortalidad y datos de precios de la competencia.Sources include structured data such as mortality tables and competitive pricing data. También se pueden usar orígenes menos tradicionales, como el clima, las noticias, etc.Less traditional sources such as weather, news and others may also be used.

    e.e. Capacidad informática para permitir investigaciones rápidas de datos interactivos.Computational capacity to enable quick interactive data investigations.

  2. También pueden usar algoritmos de aprendizaje automático ad hoc para fijar los precios o determinar la estrategia de mercado.They may also make use of ad-hoc machine learning algorithms for pricing or determining market strategy.

  3. La necesidad de visualizar y presentar datos para usarlos en el planeamiento de productos, la estrategia comercial y análisis similares.The need to visualize and present data for use in product planning, trading strategy, and similar discussions.

  4. La ejecución rápida de los modelos definidos, configurados por los analistas, para precios, valoraciones y riesgo de mercado.The rapid execution of defined models, configured by the analysts, for pricing, valuations, and market risk. Las valoraciones usan una combinación de modelado de riesgos dedicada, herramientas de riesgo de mercado y código personalizado.The valuations use a combination of dedicated risk modelling, market risk tools, and custom code. El análisis se ejecuta en un lote con diversos cálculos nocturnos, semanales, mensuales, trimestrales y anuales que generan picos en las cargas de trabajo.The analysis is executed in a batch with varying nightly, weekly, monthly, quarterly, and annual calculations generating spikes in workloads.

  5. La integración de los datos con otras medidas de riesgo empresarial para informes de riesgo consolidados.The integration of data with other enterprise wide risk measures for consolidated risk reporting. En las organizaciones más grandes, las estimaciones de riesgo de menor nivel se pueden transferir a una herramienta de informes y modelado de riesgos empresariales.In larger organizations lower level risk estimates may be transferred to an enterprise risk modelling and reporting tool.

  6. Los resultados se deben informar en un formato definido en el intervalo necesario para satisfacer los requisitos de inversores y los requisitos reglamentarios.Results must be reported in a defined format at the required interval to meet investor and regulatory requirements.

Microsoft respalda las preocupaciones mencionadas a través de una combinación de servicios de Azure y de ofertas de asociados en Azure Marketplace.Microsoft supports the above concerns through a combination of Azure services and partner offerings in the Azure Marketplace. En este artículo, mostramos ejemplos prácticos de cómo realizar una experimentación ad hoc mediante R. Para empezar, explicaremos cómo ejecutar el experimento en una sola máquina y, luego, se mostrará cómo ejecutar el mismo experimento en Azure Batch y cerraremos mostrando cómo aprovechar los servicios externos en nuestro modelado.In this article, we show practical examples of how to perform ad-hoc experimentation using R. We begin by explaining how to run the experiment on a single machine, then show how to run the same experiment on Azure Batch, and close by showing how to take advantage of external services in our modelling. Las opciones y consideraciones para la ejecución de modelos definidos en Azure se describen en estos artículos centrados en la banca y los seguros.Options and considerations for the execution of defined models on Azure are described in these articles focused on banking and insurance.

Modelado de analistas en RAnalyst Modelling in R

Para empezar, examinemos cómo un analista puede usar R en un escenario de mercados de capitales simplificado y representativo.Let's start by looking at how R may be used by an analyst in a simplified, representative capital markets scenario. Para crearlo, haga referencia a una biblioteca existente de R para el cálculo o escriba código desde cero.You can build this either by referencing an existing R library for the calculation or by writing code from scratch. En el ejemplo, también debemos capturar datos externos relacionados con los precios.In our example, we also must fetch external pricing data. Para que este ejemplo sea simple, pero ilustrativo, calculamos la posible exposición futura (PFE) de un contrato a plazo de índices bursátiles.To keep the example simple but illustrative, we calculate the potential future exposure (PFE) of an equity stock forward contract. En este ejemplo se evitan las técnicas de modelado cuantitativo complejas para instrumentos como derivados complejos y se centra en un factor de riesgo único para concentrarse en el ciclo de vida del riesgo.This example avoids complex quantitative modelling techniques for instruments like complex derivatives and focuses on a single risk factor to concentrate on the risk life cycle. En el ejemplo se hace lo siguiente:Our example does the following:

  1. Seleccionar un instrumento de interés.Select an instrument of interest.

  2. Obtener los precios históricos para el instrumento.Source historic prices for the instrument.

  3. Modelar el precio de las acciones mediante un cálculo de Montecarlo (MC) sencillo, que usa el movimiento browniano geométrico (GBM):Model equity price by simple Monte Carlo (MC) calculation, which uses Geometric Brownian Motion (GBM):

    a.a. Calcular la devolución μ (mu) y la volatilidad σ (theta) esperadas.Estimate expected return μ (mu) and volatility σ (theta).

    b.b. Calibrar el modelo según los datos históricos.Calibrate the model to historic data.

  4. Visualizar las diversas rutas para comunicar los resultados.Visualize the various paths to communicate the results.

  5. Trazar max(0,Stock Value) para demostrar el significado de PFE, la diferencia respecto del valor en riesgo (VaR).Plot max(0,Stock Value) to demonstrate the meaning of PFE, the difference to Value at Risk (VaR)

    a.a. Para aclarar: PFE = precio por acción (T) -- precio K del contrato a plazoTo clarify: PFE = Share Price (T) -- Forward Contract Price K

  6. Tomar el centil 0,95 para obtener el valor de PFE en cada período o al final del período de simulaciónTake the 0.95 Quantile to get the PFE value at each time step / end of simulation period

Se calculará la posible exposición futura de un contrato de participación a futuro en función de las acciones de MSFT.We will calculate the potential future exposure for an equity forward based on MSFT stock. Como ya se mencionó, para modelar los precios de las acciones, se requieren los precios históricos de las acciones de MSFT para poder calibrar el modelo según los datos históricos.As mentioned above, to model the stock prices, historic prices for the MSFT stock are required so we can calibrate the model to historical data. Hay muchas maneras de adquirir los precios históricos de las acciones.There are many ways to acquire historical stock prices. En el ejemplo, usamos una versión gratuita de un servicio de cotización bursátil de un proveedor de servicios externo, Quandl.In our example, we use a free version of a stock price service from an external service provider, Quandl.

Nota: En el ejemplo se usa el conjunto de datos WIKI Prices, que se puede usar para aprender los conceptos.Note: The example uses the WIKI Prices dataset which can be used for learning concepts. Para el uso en producción de capitales de los EE. UU., Quandl recomienda usar el conjunto de datos End of Day US Stock Prices.For production usage of US based equities, Quandl recommends using the End of Day US Stock Prices dataset.

Para procesar los datos y definir el riesgo asociado con el capital, es necesario hacer lo siguiente:To process the data and define the risk associated with the equity, we need to do the following things:

  1. Recuperar datos históricos relacionados con el capital.Retrieve history data from the equity.

  2. Determinar la devolución μ y la volatilidad σ esperadas a partir de los datos históricos.Determine the expected return μ and volatility σ from the historic data.

  3. Modelar los precios de acciones subyacentes mediante el uso de alguna simulación.Model the underlying stock prices using some simulation.

  4. Ejecutar el modelo.Run the model

  5. Determinar la exposición del capital en el futuro.Determine the exposure of the equity in the future.

Para empezar, recuperamos las acciones a partir del servicio de Quandl y trazamos el historial de cotizaciones de cierre de los últimos 180 días.We start by retrieving the stock from the Quandl service and plotting the closing price history over the last 180 days.

# Lubridate package must be installed
if (!require(lubridate)) install.packages('lubridate')
library(lubridate)

# Quandl package must be installed
if (!require(Quandl)) install.packages('Quandl')
library(Quandl)

# Get your API key from quandl.com
quandl_api = "enter your key here"

# Add the key to the Quandl keychain
Quandl.api_key(quandl_api)

quandl_get <-
    function(sym, start_date = "2018-01-01") {
        require(devtools)
        require(Quandl)
        # Retrieve the Open, High, Low, Close and Volume Column for a given Symbol
        # Column Indices can be deduced from this sample call
        # data <- Quandl(c("WIKI/MSFT"), rows = 1)

        tryCatch(Quandl(c(
        paste0("WIKI/", sym, ".8"),    # Column 8 : Open
        paste0("WIKI/", sym, ".9"),    # Column 9 : High
        paste0("WIKI/", sym, ".10"),   # Column 10: Low
        paste0("WIKI/", sym, ".11"),   # Column 11: Close
        paste0("WIKI/", sym, ".12")),  # Column 12: Volume
        start_date = start_date,
        type = "raw"
        ))
    }

# Define the Equity Forward
instrument.name <- "MSFT"
instrument.premium <- 100.1
instrument.pfeQuantile <- 0.95

# Get the stock price for the last 180 days
instrument.startDate <- today() - days(180)

# Get the quotes for an equity and transform them to a data frame
df_instrument.timeSeries <- quandl_get(instrument.name,start_date = instrument.startDate)

#Rename the columns
colnames(df_instrument.timeSeries) <- c()
colnames(df_instrument.timeSeries) <- c("Date","Open","High","Low","Close","Volume")

# Plot the closing price history to get a better feeling for the data
plot(df_instrument.timeSeries$Date, df_instrument.timeSeries$Close)

Con datos en mano, calibramos el modelo de GBM.With the data in hand, we calibrate the GBM model.

# Code inspired by the book Computational Finance, An Introductory Course with R by 
#    A. Arratia.

# Calculate the daily return in order to estimate sigma and mu in the Wiener Process
df_instrument.dailyReturns <- c(diff(log(df_instrument.timeSeries$Close)), NA)

# Estimate the mean of std deviation of the log returns to estimate the parameters of the Wiener Process

estimateGBM_Parameters <- function(logReturns,dt = 1/252) {

    # Volatility
    sigma_hat = sqrt(var(logReturns)) / sqrt(dt)

    # Drift
    mu_hat = mean(logReturns) / dt + sigma_hat**2 / 2.0

    # Return the parameters
    parameter.list <- list("mu" = mu_hat,"sigma" = sigma_hat)

    return(parameter.list)
}

# Calibrate the model to historic data
GBM_Parameters <- estimateGBM_Parameters(df_instrument.dailyReturns[1:length(df_instrument.dailyReturns) - 1])

A continuación, modelamos los precios de acciones subyacentes.Next, we model the underlying stock prices. Podemos implementar el proceso discreto de GBM desde cero o utilizar uno de los muchos paquetes de R que brindan esta funcionalidad.We can either implement the discrete GBM process from scratch or utilize one of many R packages which provide this functionality. Usamos el paquete sde (simulación e inferencia de ecuaciones diferenciales estocásticas) de R, que proporciona un método para resolver este problema.We use the R package sde (Simulation and Inference for Stochastic Differential Equations) which provides a method of solving this problem. El método de GBM requiere un conjunto de parámetros que se calibran según los datos históricos o que se dan como parámetros de simulación.The GBM method requires a set of parameters which are either calibrated to historic data or given as simulation parameters. Usamos los datos históricos, brindando los valores de μ, σ y los precios de las acciones al comienzo de la simulación (P0).We use the historic data, providing μ, σ and the stock prices at the beginning of the simulation (P0).

if (!require(sde)) install.packages('sde')
library(sde)

sigma <-  GBM_Parameters$sigma
mu <- GBM_Parameters$mu
P0 <- tail(df_instrument.timeSeries$Close, 1)

# Calculate the PFE looking one month into the future
T <- 1 / 12

# Consider nt MC paths
nt=50

# Divide the time interval T into n discrete time steps
n = 2 ^ 8 

dt <- T / n
t <- seq(0,T,by=dt)

Ahora estamos preparados para iniciar una simulación de Montecarlo para modelar la posible exposición futura de algún número de rutas de simulación.We are now ready to start a Monte Carlo simulation to model the potential exposure for some number of simulation paths. Limitaremos la simulación a 50 rutas de Montecarlo y 256 períodos.We will limit the simulation to 50 Monte Carlo paths and 256 time steps. Para preparar el escalado horizontal de la simulación y aprovechar la paralelización en R, el bucle de simulación de Montecarlo usa una instrucción foreach.In preparation for scaling out the simulation and taking advantage of parallelization in R, the Monte Carlo simulation loop uses a foreach statement.

# Track the start time of the simulation
start_s <- Sys.time()

# Instead of a simple for loop to execute a simulation per MC path, call the
# simulation with the foreach package
# in order to demonstrate the similarity to the AzureBatch way to call the method.

library(foreach)
# Execute the MC simulation for the wiener process utilizing the GBM method from the sde package
exposure_mc <- foreach (i=1:nt, .combine = rbind ) %do%  GBM(x = P0, r = mu, sigma = sigma, T = T, N = n)
rownames(exposure_mc) <- c()

# Track the end time of the simulation
end_s <- Sys.time()

# Duration of the simulation

difftime(end_s, start_s) 

Ahora hemos simulado el precio de la acción de MSFT subyacente.We have now simulated the price of the underlying MSFT stock. Para calcular la exposición del contrato de participación a futuro, restamos la prima y limitamos la exposición solo a los valores positivos.To calculate the exposure of the equity forward, we subtract the premium and limit the exposure to only positive values.

# Calculate the total Exposure as V_i(t) - K, put it to zero for negative exposures
pfe_mc <- pmax(exposure_mc - instrument.premium ,0)

ymax <- max(pfe_mc)
ymin <- min(pfe_mc)
plot(t, pfe_mc[1,], t = 'l', ylim = c(ymin, ymax), col = 1, ylab="Credit Exposure in USD", xlab="time t in Years")
for (i in 2:nt) {
    lines(t, pfe_mc[i,], t = 'l', ylim = c(ymin, ymax), col = i)
}

Las dos imágenes siguientes muestran el resultado de la simulación.The next two pictures show the result of the simulation. La primera imagen muestra la simulación de Montecarlo del precio de acción subyacente para 50 rutas.The first picture shows the Monte Carlo simulation of the underlying stock price for 50 paths. En la segunda imagen, se muestra el riesgo crediticio subyacente del contrato de participación a futuro después de restar la prima del contrato en cuestión y limitar la exposición a los valores positivos.The second picture illustrates the underlying Credit Exposure for the equity forward after subtracting the premium of the equity forward and limiting the exposure to positive values.

Figure 1 - 50 Monte Carlo Paths Figure 2 - Credit Exposure for Equity Forward
Ilustración 1: 50 rutas de MontecarloFigure 1 - 50 Monte Carlo Paths Ilustración 2: Riesgo crediticio del contrato de participación a futuroFigure 2 - Credit Exposure for Equity Forward

En el último paso, el PFE del centil 0,95 de un mes se calcula mediante el código siguiente.In the last step, the 1-Month 0.95 Quantile PFE is calculated by the following code.

# Calculate the PFE at each time step
df_pfe <- cbind(t,apply(pfe_mc,2,quantile,probs = instrument.pfeQuantile ))

resulting in the final PFE plot
plot(df_pfe, t = 'l', ylab = "Potential Future Exposure in USD", xlab = "time t in Years")
Potential Future Exposure for MSFT Equity Forward

Ilustración 3: Posible exposición futura del contrato de participación a futuro de MSFTFigure 3 Potential Future Exposure for MSFT Equity Forward

Uso de Azure Batch con RUsing Azure Batch with R

La solución de R descrita anteriormente se puede conectar a Azure Batch y puede aprovechar la nube para realizar los cálculos de riesgos.The R solution described above can be connected to Azure Batch and leverage the cloud for risk calculations. Esto conlleva un pequeño esfuerzo adicional para realizar un cálculo en paralelo como el nuestro.This takes little extra effort for a parallel calculation such as ours. El tutorial, Ejecución de una simulación de R en paralelo con Azure Batch, brinda información detallada sobre cómo conectar R a Azure Batch.The tutorial, Run a parallel R simulation with Azure Batch, provides detailed information on connecting R to Azure Batch. A continuación, se muestra el código y un resumen del proceso para conectar a Azure Batch y cómo aprovechar la extensión a la nube en un cálculo de PFE simplificado.Below we show the code and summary of the process to connect to Azure Batch and how to take advantage of the extension to the cloud in a simplified PFE calculation.

En este ejemplo se aborda el mismo modelo ya descrito.This example tackles the same model described earlier. Tal como vimos anteriormente, este cálculo se puede ejecutar en un equipo.As we have seen before, this calculation can run on our personal computer. Los aumentos en el número de rutas de Montecarlo o el uso de períodos más pequeños generará tiempos de ejecución mucho más largos.Increases to the number of Monte Carlo paths or use of smaller time steps will result in much longer execution times. Casi todo el código de R seguirá sin cambios.Almost all of the R code will remain unchanged. En esta sección se resaltarán las diferencias.We will highlight the differences in this section.

Cada ruta de la simulación de Montecarlo se ejecuta en Azure.Each path of the Monte Carlo simulation runs in Azure. Esto se puede hacer porque cada ruta es independiente de las demás, lo que brinda un cálculo "vergonzosamente en paralelo".We can do this because each path is independent of the others, giving us an "embarrassingly parallel" calculation.

Para usar Azure Batch, se define el clúster subyacente y se hace referencia a él en el código antes de poder usar el clúster en los cálculos.To use Azure Batch, we define the underlying cluster and reference it in the code before the cluster can be used in the calculations. Para ejecutar los cálculos, se usa la siguiente definición de cluster.json:To run the calculations, we use the following cluster.json definition:

{
  "name": "myMCPool",
  "vmSize": "Standard_D2_v2",
  "maxTasksPerNode": 4,
  "poolSize": {
    "dedicatedNodes": {
      "min": 1,
      "max": 1
    },
    "lowPriorityNodes": {
      "min": 3,
      "max": 3
    },
    "autoscaleFormula": "QUEUE"
  },
  "containerImage": "rocker/tidyverse:latest",
  "rPackages": {
    "cran": [],
    "github": [],
    "bioconductor": []
  },
  "commandLine": [],
  "subnetId": ""
}

Con esta definición de clúster, el siguiente código de R usa el clúster:With this cluster definition, the following R code makes use of the cluster:

# Define the cloud burst environment
library(doAzureParallel)

# set your credentials
setCredentials("credentials.json")

# Create your cluster if not exist
cluster <- makeCluster("cluster.json")

# register your parallel backend
registerDoAzureParallel(cluster)

# check that your workers are up
getDoParWorkers()

Por último, se actualiza la instrucción foreach anterior para que use el paquete doAzureParallel.Finally, we update the foreach statement from earlier to use the doAzureParallel package. Es un cambio menor en el que se agrega una referencia al paquete sde y se cambia %do% a %dopar%:It's a minor change, adding a reference to the sde package and changing the %do% to %dopar%:

# Execute the MC simulation for the wiener process utilizing the GBM method from the sde package and extend the computation to the cloud
exposure_mc <- foreach(i = 1:nt, .combine = rbind, .packages = 'sde') %dopar% GBM(x = P0, r = mu, sigma = sigma, T = T, N = n)
rownames(exposure_mc) <- c()

Cada simulación de Montecarlo se envía como tarea a Azure Batch.Each Monte Carlo simulation is submitted as a task to Azure Batch. La tarea se ejecuta en la nube.The task executes in the cloud. Los resultados se combinan antes de enviarlos de vuelta al área de trabajo del analista.Results are merged before being sent back to the analyst workbench. Los cálculos y el trabajo pesado se ejecutan en la nube para aprovechar completamente el escalado y la infraestructura subyacente que se requieren para los cálculos solicitados.The heavy lifting and computations execute in the cloud to take full advantage of scaling and the underlying infrastructure required by the requested calculations.

Una vez que se terminan los cálculos, los recursos adicionales se pueden apagar fácilmente si se invoca la siguiente instrucción única:After the calculations have finished, the additional resources can easily be shut-down by invoking the following a single instruction:

# Stop the Cloud cluster
stopCluster(cluster)

Uso de una oferta de SaaSUse a SaaS offering

En los dos primeros ejemplos se muestra cómo usar la infraestructura local y en la nube para desarrollar un modelo de valoración apropiado.The first two examples show how to utilize local and cloud infrastructure for developing an adequate valuation model. Este paradigma ha empezado a cambiar.This paradigm has begun to shift. Del mismo modo en que la infraestructura local se ha transformado en servicios de PaaS e IaaS basados en la nube, el modelado de las cifras de riesgos importantes se transforma en un proceso orientado al servicio.In the same way that on-premises infrastructure has transformed into cloud-based IaaS and PaaS services, the modelling of relevant risk figures is transforming into a service-oriented process. Actualmente, los analistas enfrentan dos desafíos importantes:Today's analysts face two major challenges:

  1. Los requisitos reglamentarios usan una mayor capacidad de proceso para agregar a los requisitos de modelado.The regulatory requirements use increasing compute capacity to add to modeling requirements. Los reguladores piden cifras de riesgos más frecuentes y actualizadas.The regulators are asking for more frequent and up-to date risk figures.

  2. La infraestructura de riesgo existente ha crecido de manera orgánica con el tiempo y crea desafíos al implementar requisitos nuevos y modelado de riesgos más avanzado de manera ágil.The existing risk infrastructure has grown organically with time and creates challenges when implementing new requirements and more advanced risk modeling in an agile manner.

Los servicios basados en la nube pueden brindar la funcionalidad necesaria y admiten el análisis de riesgos.Cloud-based services can deliver the required functionality and support risk analysis. Este enfoque presenta algunas ventajas:This approach has some advantages:

  • Los cálculos de riesgos más comunes que el regulador requiere los debe implementar cualquier usuario sujeto a la reglamentación.The most common risk calculations required by the regulator must be implemented by everyone under the regulation. Al usar servicios de un proveedor de servicios especializado, el analista se beneficia de los cálculos de riesgos listos para usar y que cumplen con las reglamentaciones.By utilizing services from a specialized service provider, the analyst benefits from ready to use, regulator-compliant risk calculations. Dichos servicios pueden incluir los cálculos de riesgo de mercado, los cálculos de riesgo de contraparte, el ajuste del valor X (XVA) e, incluso, los cálculos de la Revisión fundamental de la carrera de negociación (FRTB).Such services may include market risk calculations, counterparty risk calculations, X-Value Adjustment (XVA), and even Fundamental Review of Trading Book (FRTB) calculations.

  • Estos servicios exponen sus interfaces a través de los servicios web.These services expose their interfaces through web services. Estos otros servicios pueden ampliar la infraestructura de riesgo existente.The existing risk infrastructure can be enhanced by these other services.

En el ejemplo, queremos invocar un servicio basado en la nube para realizar los cálculos de FRTB.In our example, we want to invoke a cloud-based service for FRTB calculations. Varios de estos se pueden encontrar en AppSource.Several of these can be found on AppSource. Para este artículo, elegimos una opción de evaluación de Vector Risk.For this article we chose a trial option from Vector Risk. Seguiremos modificando el sistema.We will continue to modify our system. Esta vez, usaremos un servicio para calcular la cifra de riesgo de interés.This time, we use a service to calculate the risk figure of interest. Este proceso consta de los pasos siguientes:This process consists of the following steps:

  1. Llamar al servicio de riesgo pertinente con los parámetros adecuados.Call the relevant risk service and with the right parameters.

  2. Esperar hasta que el servicio termine el cálculo.Wait until the service finishes the calculation.

  3. Recuperar e incorporar los resultados en el análisis de riesgos.Retrieve and incorporate the results into the risk analysis.

Traducido al código de R, el código de R se puede mejorar con la definición de los valores de entrada necesarios a partir de una plantilla de entrada preparada.Translated into R code, our R code can be enhanced by the definition of the required input values from a prepared input template.

Template <- readLines('RequiredInputData.json')
data <- list(
# drilldown setup
  timeSteps = seq(0, n, by = 1),
  paths = as.integer(seq(0, nt, length.out = min(nt, 100))),
# calc setup
  calcDate = instrument.startDate,
  npaths = nt,
  price = P0,
  vol = sigma,
  drift = mu,
  premium = instrument.premium,
  maturityDate = today()
  )
body <- whisker.render(template, data)

A continuación, necesitamos llamar al servicio web.Next, we need to call the web service. En este caso, llamamos al método StartCreditExposure para desencadenar el cálculo.In this case, we call the StartCreditExposure method to trigger the calculation. El punto de conexión de la API se almacena en una variable denominada endpoint.We store the endpoint for the API in a variable named endpoint.

# make the call
result <- POST( paste(endpoint, "StartCreditExposure", sep = ""),  
                authenticate(username, password, type = "basic"),
                content_type("application/json"),
                add_headers(`Ocp-Apim-Subscription-Key` = api_key),
                body = body, encode = "raw"
               )

result <- content(result)

Una vez que finalizan los cálculos, se recuperan los resultados.Once the calculations have finished, we retrieve the results.

# get back high level results
result <- POST( paste(endpoint, "GetCreditExposureResults", sep = ""), 
                authenticate(username, password, type = "basic"),
                content_type("application/json"),
                add_headers(`Ocp-Apim-Subscription-Key` = api_key),
               body = sprintf('{"getCreditExposureResults": {"token":"DataSource=Production;Organisation=Microsoft", "ticket": "%s"}}', ticket), encode = "raw")

result <- content(result)

Esto permite que el analista continúa con los resultados que recibió.This leaves the analyst to continue with the results received. Las cifras de riesgo pertinentes de interés se extraen de los resultados y se trazan.The relevant risk figures of interest are extracted from the results and plotted.

if (!is.null(result$error)) {
    cat(result$error$message)
} else {
    # plot PFE
    result <- result$getCreditExposureResultsResponse$getCreditExposureResultsResult
    df <- do.call(rbind, result$exposures)
    df <- as.data.frame(df)
    df <- subset(df, term <= n)   
}

plot(as.numeric(df$term[df$statistic == 'PFE']) / 365, df$result[df$statistic == 'PFE'], type = "p", xlab = ("time t in Years"), ylab = ("Potential Future Exposure in USD"), ylim = range(c(df$result[df$statistic == 'PFE'], df$result[df$statistic == 'PFE'])), col = "red")

Los trazados resultantes tienen este aspecto:The resulting plots look like this:

Figure 4 - Credit Exposure for MSFT Equity Forward - Calculated with a Cloud Based Risk Engine Figure 5 - Potential Future Exposure for MSFT Equity Forward - Calculated with a Cloud  Based Risk Engine
Ilustración 4: Riesgo crediticio del contrato de participación a futuro de MSFT,Figure 4 - Credit Exposure for MSFT Equity Forward -
que se calcula con un motor de riesgos basado en la nubeCalculated with a Cloud Based Risk Engine
Ilustración 5: Posible exposición futura del contrato de participación a futuro de MSFT,Figure 5 - Potential Future Exposure for MSFT Equity Forward -
que se calcula con un motor de riesgos basado en la nubeCalculated with a Cloud Based Risk Engine

Pasos siguientesNext Steps

El acceso flexible a la nube a través de una infraestructura de proceso y los servicios de análisis de riesgos basados en SaaS pueden ofrecer mejoras en términos de velocidad y agilidad para los analistas de riesgos que trabajan en seguros y mercados de capitales.Flexible access to the cloud through compute infrastructure and SaaS-based risk analysis services can deliver improvements in speed and agility for risk analysts working in capital markets and insurance. En este artículo trabajamos con un ejemplo en el que se ilustra cómo usar Azure y otros servicios con las herramientas que los analistas de riesgos conocen.In this article we worked through an example which illustrates how to use Azure and other services using tools risk analysts know. Pruebe aprovechar las funcionalidades de Azure cuando crea y mejora los modelos de riesgo.Try taking advantage of Azure's capabilities as you create and enhance your risk models.

TutorialesTutorials

Artículo escrito por el Dr. Darko Mocelj y Rupert Nicolay.This article was authored by Dr. Darko Mocelj and Rupert Nicolay.