Local skore Project#

This example shows how to use Project in local mode: store reports on your machine and inspect them. A key point is that summarize() returns a Summary, which is a pandas.DataFrame. In Jupyter you get an interactive widget, but you can always inspect and filter the summary as a DataFrame if you prefer.

Create a local project and store reports#

We use a temporary directory as the workspace so the example is self-contained. In practice you can omit workspace to use the default (e.g. a skore/ directory in your user cache).

from pathlib import Path
from tempfile import TemporaryDirectory

from skore import Project

tmp_dir = TemporaryDirectory()
tmp_path = Path(tmp_dir.name)
project = Project("example-project", workspace=tmp_path)
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from skore import train_test_split
from skrub import tabular_pipeline

X, y = load_breast_cancer(return_X_y=True, as_frame=True)
split_data = train_test_split(X=X, y=y, random_state=42, as_dict=True)
estimator = tabular_pipeline(LogisticRegression(max_iter=1_000))
╭────────────────────── HighClassImbalanceTooFewExamplesWarning ───────────────────────╮
│ It seems that you have a classification problem with at least one class with fewer   │
│ than 100 examples in the test set. In this case, using train_test_split may not be a │
│ good idea because of high variability in the scores obtained on the test set. We     │
│ suggest three options to tackle this challenge: you can increase test_size, collect  │
│ more data, or use skore's CrossValidationReport with the `splitter` parameter of     │
│ your choice.                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────── ShuffleTrueWarning ─────────────────────────────────╮
│ We detected that the `shuffle` parameter is set to `True` either explicitly or from  │
│ its default value. In case of time-ordered events (even if they are independent),    │
│ this will result in inflated model performance evaluation because natural drift will │
│ not be taken into account. We recommend setting the shuffle parameter to `False` in  │
│ order to ensure the evaluation process is really representative of your production   │
│ release process.                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────╯
import numpy as np
from sklearn.base import clone
from skore import EstimatorReport

for regularization in np.logspace(-7, 7, 31):
    report = EstimatorReport(
        clone(estimator).set_params(logisticregression__C=regularization),
        **split_data,
        pos_label=1,
    )
    project.put(f"lr-regularization-{regularization:.1e}", report)

Summarize: you get a DataFrame#

summarize() returns a Summary, which subclasses pandas.DataFrame. In a Jupyter environment it renders an interactive parallel-coordinates widget by default.

summary = project.summarize()

To see the normal DataFrame table instead of the widget (e.g. in scripts or when you prefer the table), wrap the summary in pandas.DataFrame:

import pandas as pd

pandas_summary = pd.DataFrame(summary)
pandas_summary
key date learner ml_task report_type dataset rmse log_loss roc_auc fit_time predict_time rmse_mean log_loss_mean roc_auc_mean fit_time_mean predict_time_mean
id
0 eb8cfdc17ec8193b1f6bb305c220ccc1 lr-regularization-1.0e-07 2026-03-12T16:59:41.975546+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.662918 0.992509 0.134947 0.071341 None None None None None
1 8dda07a5e214d92705b4f2a36b7b3de0 lr-regularization-2.9e-07 2026-03-12T16:59:42.147603+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.662790 0.992509 0.066210 0.041847 None None None None None
2 cf2ef926604f1d1b9e06947bd10eb1aa lr-regularization-8.6e-07 2026-03-12T16:59:42.311242+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.662415 0.992509 0.086926 0.041963 None None None None None
3 06502f682a0d44d6f4ef4a272e582408 lr-regularization-2.5e-06 2026-03-12T16:59:42.453628+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.661320 0.992509 0.066357 0.043972 None None None None None
4 08abfe92233ae18d69d13a5f94bf18ed lr-regularization-7.4e-06 2026-03-12T16:59:42.602599+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.658141 0.992509 0.069089 0.043199 None None None None None
5 85f500e0403f7381f127bd3b27707c00 lr-regularization-2.2e-05 2026-03-12T16:59:42.769314+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.649068 0.992509 0.076682 0.064348 None None None None None
6 766de8f11dbe259f213f71bab51c2494 lr-regularization-6.3e-05 2026-03-12T16:59:42.937441+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.624398 0.992926 0.067461 0.040301 None None None None None
7 6fb6758e5c361221cba54dae21c2aa05 lr-regularization-1.8e-04 2026-03-12T16:59:43.085669+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.565558 0.993550 0.068061 0.042438 None None None None None
8 f8f3d9e4ab6c2f0c67a99f87383c4263 lr-regularization-5.4e-04 2026-03-12T16:59:43.232278+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.460542 0.994382 0.068716 0.050010 None None None None None
9 85c4b6a6d244d1f97fcc25f5b817ac09 lr-regularization-1.6e-03 2026-03-12T16:59:43.396037+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.336408 0.996047 0.072433 0.041513 None None None None None
10 df8de083517c61e015e70e7f5b86a7a2 lr-regularization-4.6e-03 2026-03-12T16:59:43.541713+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.231201 0.997087 0.068690 0.041406 None None None None None
11 b2bf744316e37fb59c5e0249d947b8b3 lr-regularization-1.4e-02 2026-03-12T16:59:43.687081+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.155570 0.998335 0.069405 0.040609 None None None None None
12 a4ab6d3ceeb3cc6e2c339b913aba3f06 lr-regularization-4.0e-02 2026-03-12T16:59:43.848022+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.105629 0.998752 0.084463 0.041229 None None None None None
13 74d5fd9d19888ee4e5dd319a6b99831c lr-regularization-1.2e-01 2026-03-12T16:59:43.998077+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.075737 0.998752 0.067185 0.070919 None None None None None
14 34bd4e9c3c0bff50452c054538e23616 lr-regularization-3.4e-01 2026-03-12T16:59:44.230606+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.060118 0.997919 0.110477 0.069790 None None None None None
15 5bfc3812072e304e51f53a510fcf7428 lr-regularization-1.0e+00 2026-03-12T16:59:44.460104+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.054072 0.997919 0.110539 0.070536 None None None None None
16 257a5044373eb915ef55474e929cbf90 lr-regularization-2.9e+00 2026-03-12T16:59:44.692777+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.055710 0.997711 0.112604 0.068537 None None None None None
17 f89e01874478028dbc60dcb7045bcafa lr-regularization-8.6e+00 2026-03-12T16:59:44.922874+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.062826 0.997503 0.112885 0.069329 None None None None None
18 5a3ccf3082fd70b1395814288cf41133 lr-regularization-2.5e+01 2026-03-12T16:59:45.155580+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.080149 0.996463 0.114422 0.067400 None None None None None
19 372303757884291609464907242a302a lr-regularization-7.4e+01 2026-03-12T16:59:45.369797+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.129595 0.993550 0.099169 0.062227 None None None None None
20 91872a2d4bdd0c3b641ddf2b49e5db51 lr-regularization-2.2e+02 2026-03-12T16:59:45.615572+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.245793 0.990845 0.127851 0.073443 None None None None None
21 de2ab1d83e703b7b2f7b988689888a77 lr-regularization-6.3e+02 2026-03-12T16:59:45.870154+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.456457 0.989180 0.126465 0.070806 None None None None None
22 b3ce4218638e71cff93d2173a049b136 lr-regularization-1.8e+03 2026-03-12T16:59:46.113264+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 0.755451 0.987516 0.122614 0.070528 None None None None None
23 4442df80f3410eacce88dc6a9fe16461 lr-regularization-5.4e+03 2026-03-12T16:59:46.364989+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 1.135445 0.987308 0.127922 0.061095 None None None None None
24 85b44cbf47ce4b08998add4d0ef34efd lr-regularization-1.6e+04 2026-03-12T16:59:46.618655+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 1.566408 0.982834 0.136921 0.062403 None None None None None
25 b4e3b27faac33d2a8177e60ed5cbd345 lr-regularization-4.6e+04 2026-03-12T16:59:46.788812+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 1.921192 0.982418 0.073491 0.041301 None None None None None
26 ff202657e3d220ee1e28d3f875b2caee lr-regularization-1.4e+05 2026-03-12T16:59:47.002479+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 2.001411 0.982626 0.125214 0.071304 None None None None None
27 f8f1555299ec0ee2348f4b5b7fceef7b lr-regularization-4.0e+05 2026-03-12T16:59:47.239728+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 2.192980 0.981898 0.120432 0.069411 None None None None None
28 2985a6794cc875bb590cc31f7738262e lr-regularization-1.2e+06 2026-03-12T16:59:47.504384+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 2.268483 0.973159 0.142088 0.067730 None None None None None
29 27e1fdc6ef79fef99b5c574ac6ab0376 lr-regularization-3.4e+06 2026-03-12T16:59:47.733902+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 2.268482 0.973367 0.113627 0.065951 None None None None None
30 8192813fd865d105850c72e3fd1f17ef lr-regularization-1.0e+07 2026-03-12T16:59:47.960964+00:00 LogisticRegression binary-classification estimator 0966e6e4b6a8c8bd5b0e6bd95f36939d None 2.268482 0.973159 0.113750 0.066742 None None None None None


Basically, our summary contains metadata related to various information that we need to quickly help filtering the reports.

<class 'skore._project._summary.Summary'>
MultiIndex: 31 entries, (0, 'eb8cfdc17ec8193b1f6bb305c220ccc1') to (30, '8192813fd865d105850c72e3fd1f17ef')
Data columns (total 16 columns):
 #   Column             Non-Null Count  Dtype
---  ------             --------------  -----
 0   key                31 non-null     object
 1   date               31 non-null     object
 2   learner            31 non-null     category
 3   ml_task            31 non-null     object
 4   report_type        31 non-null     object
 5   dataset            31 non-null     object
 6   rmse               0 non-null      object
 7   log_loss           31 non-null     float64
 8   roc_auc            31 non-null     float64
 9   fit_time           31 non-null     float64
 10  predict_time       31 non-null     float64
 11  rmse_mean          0 non-null      object
 12  log_loss_mean      0 non-null      object
 13  roc_auc_mean       0 non-null      object
 14  fit_time_mean      0 non-null      object
 15  predict_time_mean  0 non-null      object
dtypes: category(1), float64(4), object(11)
memory usage: 5.3+ KB

Filter reports by metric (e.g. keep only those above a given accuracy) and work with the result as a table.

summary.query("log_loss < 0.1")["key"].tolist()
['lr-regularization-1.2e-01', 'lr-regularization-3.4e-01', 'lr-regularization-1.0e+00', 'lr-regularization-2.9e+00', 'lr-regularization-8.6e+00', 'lr-regularization-2.5e+01']

Use reports() to load the corresponding reports from the project (optionally after filtering the summary).

reports = summary.query("log_loss < 0.1").reports(return_as="comparison")
len(reports.reports_)
6

Since we got a ComparisonReport, we can use the metrics accessor to summarize the metrics across the reports.

reports.metrics.summarize().frame()
Estimator LogisticRegression_1 LogisticRegression_2 LogisticRegression_3 LogisticRegression_4 LogisticRegression_5 LogisticRegression_6
Metric
Accuracy 0.993007 0.993007 0.993007 0.979021 0.972028 0.979021
Precision 0.988889 0.988889 0.988889 0.988636 0.988506 0.988636
Recall 1.000000 1.000000 1.000000 0.977528 0.966292 0.977528
ROC AUC 0.998752 0.997919 0.997919 0.997711 0.997503 0.996463
Brier score 0.016769 0.014335 0.013810 0.015269 0.017996 0.022781
Fit time (s) 0.067185 0.110477 0.110539 0.112604 0.112885 0.114422
Predict time (s) 0.066537 0.066593 0.082352 0.076562 0.075011 0.074966


reports.metrics.roc().plot(subplot_by=None)
ROC Curve Positive label: 1 Data source: Test set
project.delete("example-project", workspace=tmp_path)
tmp_dir.cleanup()

Total running time of the script: (0 minutes 8.677 seconds)

Gallery generated by Sphinx-Gallery