It is a multivariate probabilistic modelling package, which uses copula theory.
The package can be installed via pip using:
pip install multicopula
Run a basic example as:
from multicopula import EllipticalCopula
import numpy as np
#%% Generate random data from a multivariate gaussian of 3-dimensions
n_samples_ = 5000
covariance_ = np.array([[ 1, -0.6, 0.7],
[-0.6, 1, -0.4],
[ 0.7, -0.4, 1]])
mean_ = np.array([1, 3, 4])
data = np.random.multivariate_normal(mean_, covariance_, 5000).T
#%% Fit the copula model (rows are variables and columns are data samples for each one of the variables)
copula_model = EllipticalCopula(data)
copula_model.fit()
#%% Sample the copula model
samples_ = copula_model.sample(500)
covariance_samples = np.corrcoef(samples_)
#%% Sampling the copula model conditioning the third dimension
samples_cond1 = copula_model.sample(500, conditional=True, variables={'x3': 3.4})
#%% Sampling the copula model conditioning second and third dimension
samples_cond2 = copula_model.sample(500, conditional=True, variables={'x2': 2.8, 'x3': 3.4})
The package can be used to simulate daily electrical consumption profiles (active and reactive power) for low voltage and medium voltage networks.
In this application, the daily load profile (15-minute resolution) is modeled with a copula where each time step
is a stochastic variable. i.e.,
The idea is to generate consistent daily profiles depending on the increase in annual energy consumption. In other
words, to create profiles conditioned to the variable
More examples can be found in the examples folder (under development).
The mathematical formulation of the generative model with the copula can be found at:
"Conditional Multivariate Elliptical Copulas to Model Residential Load Profiles From Smart Meter Data," E.M. (Mauricio) Salazar Duque, P.P. Vergara, P.H. Nguyen, A. van der Molen and J. G. Slootweg, in IEEE Transactions on Smart Grid, vol. 12, no. 5, pp. 4280-4294, Sept. 2021, doi: 10.1109/TSG.2021.3078394
Any questions, suggestions or collaborations contact Mauricio Salazar at e.m.salazar.duque@tue.nl