skepsis
Is your backtest result real, or overfit?
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)
| File | Size | Uploaded | |
|---|---|---|---|
| skepsis-0.1.0.tar.gz | 405.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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