[SciPy-Dev] Stochastic calculus package

Matt Haberland haberland at ucla.edu
Fri Sep 8 13:06:56 EDT 2017


Sounds like a pretty general computational tool to me. I have some problems
in rigid body dynamics that I'd like to use this for.
Matt

On Fri, Sep 8, 2017 at 12:55 AM, Maurizio Cipollina <
maurizio.cipollina at gmail.com> wrote:

> Hi everybody, and first of all thanks for the great job you have been
> doing, on which I relied *A LOT* over time.
>
> Stochastic calculus and Stochastic Differential Equations are a
> significant branch of mathematics that to my understanding is
> underrepresented in scipy, as well as in the open source python stack at
> large. I may well be missing something, but as I can see one can find out
> there many recipies or collections of recipies, and a number of
> packages/projects skewed towards finance, but no structured framework for
> generating and handling stochastic processes and numerically solving SDEs.
>
> This is a pity, since scipy/numpy provide efficen implementations of all
> the basic ingredients needed to do the trick. Out of professional need, and
> prompted by this gap, I have developed a general purpose package of which I
> own the copyright, and which I would be happy to release under the BSD
> license as part of scipy, in case there is a consensus among the scipy
> community that it makes sense to do so (the package has no dependencies
> beyond standard library, numpy and scipy, and might probably fit best as a
> subpackage of scipy.stats).
>
> Before setting up a PR, I would be happy to hear your thoughts: I have
> pasted below the package docstring, that should give an overview of its
> scope and limitations. Please note that some of the realized processes
> stray into mathematical finance territory, somehow inevitably since finance
> is one major field of application of stochastic calculus, but the focus is
> the latter, not the former, at least in my intentions.
>
> Thanks in advance for taking your time to go through this, and for your
> comments and suggestions.
> Maurizio
>
> “””
> ===========================================================
> Stochastic - Monte Carlo simulation of stochastic processes
> ===========================================================
>
> This package provides:
>
> 1.  A `process` class, a subclass of `numpy.ndarray` representing
>     a sequence of values in time, realized in one or several paths.
>     Algebraic manipulations and ufunc computations are supported for
>     instances that share the same timeline and comply with numpy
>     broadcasting rules. Interpolation along the timeline is supported
>     via callability of `process` instances. Process-specific
> functionalities,
>     such as averaging and indexing along time or across paths, are
> delegated
>     to process-specific methods, attributes and properties (no overriding
>     of `numpy.ndarray` operations).
>
> 2.  The `source` class and its subclasses, stochasticity sources providing
>     numerical realizations of the differentials commonly found
>     in stochastic differential equations (SDEs), with or without
>     memory of formerly invoked realizations.
>
> 3.  The `integrator` class, a general framework for numerical SDE
>     integration, intended for subclassing, to assist the definition of
> step by
>     step integration algorithms and the computation of numerical
> realizations of
>     stochastic processes.
>
> 4.  Several objects providing realizations of specific stochastic processes
>     along a given timeline and across a requested number of paths.
>     Realizations are obtained via explicit formulae, in case the relevant
> SDE
>     has a closed form solution, or otherwise as `integrator` subclasses
> performing
>     Euler-Maruyama numerical integration.
>
> 5.  A `montecarlo` class, as an aid to cumulate the results of several
>     Monte Carlo simulations of a given stochastic variable, and to extract
>     summary estimates for its probability distribution function and
>     statistics, thus supporting simulations across a number of paths that
> exceeds
>     the maximum allowed by available memory.
>
> 6.  Several analytical results relating to the supported stochastic
>     processes, as a general reference and for testing purpouses.
>
> For all sources and realizations, process values can take any shape,
> scalar or multidimensional. Correlated multivariate stochasticity sources
> are
> supported. Time-varying process parameters (correlations, intensity of
> Poisson
> processes, volatilities etc.) are allowed whenever applicable.
> `process` instances act as valid stochasticity source realizations (as does
> any callable object complying with a `source` protocol), and may be
> passed as a source specification when computing the realization of a given
> process.
>
> Computations are fully vectorized across paths, providing an efficient
> infrastructure for simulating a large number of process realizations.
> Less so, for large number of time steps: integrating 1000 time steps
> across 100000 paths takes seconds, one million time steps across
> 100 paths takes minutes.
>
> General infrastructure
> ======================
> .. autosummary::
>    :toctree: generated/
>
>    process     -- Array representation of a process (a subclass of
>                   -- numpy.ndarray).
>    kfunc       -- Base class for functions with managed keyword arguments.
>    source      -- Base class for stochasticity sources.
>    true_source -- Base class for stochasticity sources with memory.
>    integrator  -- General framework for numerical SDE integration.
>    montecarlo  -- Summmary statistics of Monte Carlo simulations.
>
>
> Stochasticity sources
> =====================
> .. autosummary::
>    :toctree: generated/
>
>    wiener              -- dW, a source of standard Wiener process (Brownian
>                           -- motion) increments.
>    symmetric_wiener    -- as above, with symmetric paths (averages exactly
> 0).
>    true_wiener         -- dW, a source of standard Wiener process (Brownian
>                           -- motion) increments, with memory.
>    poisson             -- dN, a source of Poisson process increments.
>    compound_poisson    -- dJ, a source of compound Poisson process
> increments.
>                           -- (jumps distributed in time as a Poisson
> process,
>                           -- and in size as a given `scipy.stats`
> distribution).
>    compound_poisson_rv -- Preset jump size distributions for compound
> Poisson
>                           -- process increments.
>
>
> Stochastic process realizations
> ===============================
> .. autosummary::
>    :toctree: generated/
>
>    const_wiener_process          -- Wiener process (Brownian motion), with
>                                     -- time-independent parameters.
>    const_lognorm_process         -- Lognormal process, with
> time-independent
>                                     -- parameters.
>    wiener_process                -- Wiener process (Brownian motion).
>    lognorm_process               -- Lognormal process.
>    ornstein_uhlenbeck_process    -- Ornstein-Uhlenbeck process
> (mean-reverting
>                                     -- Brownian motion).
>    hull_white_process            -- F-factors Hull-White process (sum of F
>                                     -- correlated mean-reverting Brownian
>                                     -- motions).
>    hull_white_1factor_process    -- 1-factor Hull-White process (F=1
> Hull-White
>                                     -- process with F-index collapsed to a
>                                     -- scalar).
>    cox_ingersoll_ross_process    -- Cox-Ingersoll-Ross mean-reverting
> process.
>    full_heston_process           -- Heston stochastic volatility process
>                                     -- (returns both process and
> volatility).
>    heston_process                -- Heston stochastic volatility process
>                                     -- (stores and returns process only).
>    jump_diffusion_process        -- Jump-diffusion process (lognormal
> process
>                                     -- with compound Poisson jumps).
>    merton_jump_diffusion_process -- Merton jump-diffusion process
>                                     -- (jump-diffusion process with normal
>                                     -- jump size distribution).
>    kou_jump_diffusion_process    -- Kou jump-diffusion process
> (jump-diffusion
>                                     -- process with double exponential
>                                     -- jump size distribution).
>
> Shortcuts::
>
>    lognorm -- lognorm_process
>    oruh    -- ornstein_uhlenbeck_process
>    hwp     -- hull_white_process
>    hw1f    -- hull_white_1factor_process
>    cir     -- cox_ingersoll_ross_process
>    heston  -- heston_process
>    mjd     -- merton_jump_diffusion_process
>    kou     -- kou_jump_diffusion_process
>
>
> Analytical results
> ==================
> Exact statistics for the realized stochastic processes
> are listed below, limited to the case of constant process parameters and
> with
> some further limitations to the parameters' domains.
> Function arguments are consistent with those of the corresponding
> processes.
> Suffixes `pdf`, `cdf` and `chf` stand respectively for probability
> distribution
> function, cumulative probability distribution function, and characteristic
> function. Black-Scholes formulae for the valuation of call and put options
> have been
> included (prefixed with `bs` below).
>
> .. autosummary::
>    :toctree: generated/
>
>    wiener_mean
>    wiener_var
>    wiener_std
>    wiener_pdf
>    wiener_cdf
>    wiener_chf
>
>    lognorm_mean
>    lognorm_var
>    lognorm_std
>    lognorm_pdf
>    lognorm_cdf
>    lognorm_log_chf
>
>    oruh_mean
>    oruh_var
>    oruh_std
>    oruh_pdf
>    oruh_cdf
>
>    hw2f_mean
>    hw2f_var
>    hw2f_std
>    hw2f_pdf
>    hw2f_cdf
>
>    cir_mean
>    cir_var
>    cir_std
>    cir_pdf
>
>    heston_log_mean
>    heston_log_var
>    heston_log_std
>    heston_log_pdf
>    heston_log_chf
>
>    mjd_log_pdf
>    mjd_log_chf
>
>    kou_mean
>    kou_log_pdf
>    kou_log_chf
>
>    bsd1d2
>    bscall
>    bscall_delta
>    bsput
>    bsput_delta
>
> Notes
> =====
> To the benefit of interactive and notebook sessions, and as an aid to
> fluently
> freeze or vary the plurality of parameters that define each stochastic
> process,
> all sources, process realizations and analytical results are objects
> with managed keywords (subclasses of `kfunc`): if the corresponding classes
> are instantiated with both variables (non keyword arguments) and parameters
> (keyword arguments), they behave as functions returning the computations'
> result; if called with parameters only, return an instance that stores the
> set
> parameters, and exposes the same calling pattern (call with variables
> and optionally with parameters to get results, call with parameters only
> to get a new instance storing modified parameters).
> Parameters that are not specified fall back to the class defaults, if
> calling
> the class, or to the instance's stored values, if calling an instance.
> """
>
> _______________________________________________
> SciPy-Dev mailing list
> SciPy-Dev at python.org
> https://mail.python.org/mailman/listinfo/scipy-dev
>
>


-- 
Matt Haberland
Assistant Adjunct Professor in the Program in Computing
Department of Mathematics
7620E Math Sciences Building, UCLA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20170908/d2ee6edb/attachment-0001.html>


More information about the SciPy-Dev mailing list