Skip to main content

skepsis

Is your backtest result real, or overfit?

ci PyPI docs

skepsis report

skepsis takes the returns of a backtested strategy — and, ideally, the returns of every variant you tried along the way — and produces statistical evidence for or against the result being luck, plus a self-contained HTML report you can hand to a PM.

pip install skepsis

Quickstart

import skepsis

result = skepsis.evaluate(
    returns,            # per-period returns of the chosen strategy
    trials=trials_df,   # T x N returns of all variants tried (optional, unlocks DSR + PBO)
    params=params_df,   # one row of parameter values per trial (optional, unlocks sensitivity)
    freq="daily",
)
print(result.summary())
result.save_html("skepsis_report.html")

More inputs unlock more diagnostics; the report states plainly which diagnostics could not run and why.

Docs: https://abhinay.github.io/skepsis · Demo: Deflating the Golden Cross

The diagnostics

Diagnostic Question it answers Source
Probabilistic / Deflated Sharpe Ratio Is the Sharpe distinguishable from zero once sample length, fat tails, and how many things you tried are priced in? Bailey & López de Prado (2012, 2014)
Probability of Backtest Overfitting (CSCV) How often does your in-sample winner land in the bottom half out-of-sample? Bailey, Borwein, López de Prado & Zhu (2015)
Stationary block bootstrap What does the Sharpe/drawdown distribution look like under resampling that preserves autocorrelation — and does a no-skill null explain it? Politis & Romano (1994); Politis & White (2004)
Parameter sensitivity Is the chosen configuration a plateau (robust) or an isolated spike (fitted to noise)? —

The implementations are verified against reference values in tests/golden/ — including reproducing the published numerical example of the Deflated Sharpe Ratio paper to all four printed decimals (test_dsr_paper_example.py).

What skepsis is not

Not a backtester, not a data source, not a portfolio optimizer. It sits downstream of vectorbt, backtesting.py, zipline, or your homegrown engine, and it never silently repairs bad input: NaNs are rejected, strained assumptions are warned about, skipped diagnostics say why.

License

Apache-2.0.

Metadata

Release files for skepsis 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skepsis 0.1.0
File Size Uploaded
skepsis-0.1.0.tar.gz 405.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skepsis 0.1.0
File Interpreter ABI Platform
skepsis-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 436.4 kB

Release files / skepsis-0.1.0.tar.gz

Download URL skepsis-0.1.0.tar.gz
Size 405.0 kB
Tags Source
SHA-256 checksum
How to use checksums
dee0248e6e69c15702aa811dca09e5e18e95b98ef208ef83dd177549f096e8f4
BLAKE2b-256 checksum
How to use checksums
613a7135f1bbf567e22520c2398178e0c2133cb81a86ee8b1c36e2cfa299f1dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.

Transparency log

Release files / skepsis-0.1.0-py3-none-any.whl

Download URL skepsis-0.1.0-py3-none-any.whl
Size 31.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6a63a62183a66a98d1f7f5a36f2f325d7f8a02ca1235caa5d38f78fdc5e60a16
BLAKE2b-256 checksum
How to use checksums
27ccd6f0a803b9c32e4e1bd8297673ee471c1885b245cad0942693db7f970674
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page