%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.11%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22scikit-learn%22%2C%0A%23%20%20%20%20%20%22yohou%5Bplotting%5D%22%2C%0A%23%20%5D%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.23.8%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Conformal%20Prediction%20Intervals%0A%0A%20%20%20%20%5B%60SplitConformalForecaster%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.interval.split_conformal.SplitConformalForecaster%2F)%20wraps%20**any**%20point%20forecaster%20and%20produces%0A%20%20%20%20**distribution-free**%20prediction%20intervals%20with%20finite-sample%20coverage%0A%20%20%20%20guarantees%2C%20using%20a%20held-out%20calibration%20set.%0A%0A%20%20%20%20%23%23%20Prerequisites%0A%0A%20%20%20%20Basic%20understanding%20of%20prediction%20intervals%20and%20%5B%60PointReductionForecaster%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.point.reduction.PointReductionForecaster%2F).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20from%20copy%20import%20deepcopy%0A%0A%20%20%20%20import%20polars%20as%20pl%0A%20%20%20%20from%20sklearn.linear_model%20import%20Ridge%0A%0A%20%20%20%20from%20yohou.datasets%20import%20fetch_tourism_monthly%0A%20%20%20%20from%20yohou.interval%20import%20SplitConformalForecaster%0A%20%20%20%20from%20yohou.metrics%20import%20(%0A%20%20%20%20%20%20%20%20AbsoluteResidual%2C%0A%20%20%20%20%20%20%20%20EmpiricalCoverage%2C%0A%20%20%20%20%20%20%20%20GammaResidual%2C%0A%20%20%20%20%20%20%20%20IntervalScore%2C%0A%20%20%20%20%20%20%20%20MeanIntervalWidth%2C%0A%20%20%20%20%20%20%20%20Residual%2C%0A%20%20%20%20)%0A%20%20%20%20from%20yohou.model_selection%20import%20train_test_split%0A%20%20%20%20from%20yohou.plotting%20import%20(%0A%20%20%20%20%20%20%20%20plot_forecast%2C%0A%20%20%20%20%20%20%20%20plot_score_per_vintage%2C%0A%20%20%20%20%20%20%20%20plot_score_time_series%2C%0A%20%20%20%20)%0A%20%20%20%20from%20yohou.point%20import%20PointReductionForecaster%2C%20SeasonalNaive%0A%20%20%20%20from%20yohou.preprocessing%20import%20LagTransformer%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20AbsoluteResidual%2C%0A%20%20%20%20%20%20%20%20EmpiricalCoverage%2C%0A%20%20%20%20%20%20%20%20GammaResidual%2C%0A%20%20%20%20%20%20%20%20IntervalScore%2C%0A%20%20%20%20%20%20%20%20LagTransformer%2C%0A%20%20%20%20%20%20%20%20MeanIntervalWidth%2C%0A%20%20%20%20%20%20%20%20PointReductionForecaster%2C%0A%20%20%20%20%20%20%20%20Residual%2C%0A%20%20%20%20%20%20%20%20Ridge%2C%0A%20%20%20%20%20%20%20%20SeasonalNaive%2C%0A%20%20%20%20%20%20%20%20SplitConformalForecaster%2C%0A%20%20%20%20%20%20%20%20deepcopy%2C%0A%20%20%20%20%20%20%20%20fetch_tourism_monthly%2C%0A%20%20%20%20%20%20%20%20plot_forecast%2C%0A%20%20%20%20%20%20%20%20plot_score_per_vintage%2C%0A%20%20%20%20%20%20%20%20plot_score_time_series%2C%0A%20%20%20%20%20%20%20%20train_test_split%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Prepare%20Data%0A%0A%20%20%20%20We%20load%20the%20Monthly%20Tourism%20dataset%20and%20split%20it%20into%20training%20and%20test%20sets%20for%20calibrating%20and%20evaluating%20conformal%20intervals.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(fetch_tourism_monthly%2C%20train_test_split)%3A%0A%20%20%20%20y%20%3D%20fetch_tourism_monthly().frame.select(%22time%22%2C%20%22T1__tourists%22).drop_nulls().rename(%7B%22T1__tourists%22%3A%20%22tourists%22%7D)%0A%0A%20%20%20%20%23%20Need%20enough%20calibration%20data%3A%20use%2080%2F20%20split%0A%20%20%20%20y_train%2C%20y_test%20%3D%20train_test_split(y%2C%20test_size%3D0.2)%0A%20%20%20%20forecasting_horizon%20%3D%20min(len(y_test)%2C%2012)%20%20%23%20Limit%20horizon%20for%20calibration%0A%0A%20%20%20%20print(f%22Train%3A%20%7Blen(y_train)%7D%2C%20Test%3A%20%7Blen(y_test)%7D%22)%0A%20%20%20%20return%20forecasting_horizon%2C%20y_test%2C%20y_train%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20SplitConformalForecaster%0A%0A%20%20%20%20Wraps%20a%20point%20forecaster%20and%20uses%20a%20calibration%20set%20to%20compute%20conformal%20scores.%0A%20%20%20%20%60calibration_size%60%20controls%20how%20many%20of%20the%20most%20recent%20training%20observations%0A%20%20%20%20are%20used%20for%20calibration.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20LagTransformer%2C%0A%20%20%20%20PointReductionForecaster%2C%0A%20%20%20%20Ridge%2C%0A%20%20%20%20SplitConformalForecaster%2C%0A%20%20%20%20forecasting_horizon%2C%0A%20%20%20%20y_train%2C%0A)%3A%0A%20%20%20%20conformal%20%3D%20SplitConformalForecaster(%0A%20%20%20%20%20%20%20%20point_forecaster%3DPointReductionForecaster(%0A%20%20%20%20%20%20%20%20%20%20%20%20estimator%3DRidge()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20feature_transformer%3DLagTransformer(lag%3Dlist(range(1%2C%2013)))%2C%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20calibration_size%3D30%2C%0A%20%20%20%20)%0A%0A%20%20%20%20conformal.fit(y_train%2C%20forecasting_horizon%3Dforecasting_horizon)%0A%0A%20%20%20%20coverage_rates%20%3D%20%5B0.8%2C%200.9%5D%0A%20%20%20%20y_pred_int%20%3D%20conformal.predict_interval(%0A%20%20%20%20%20%20%20%20forecasting_horizon%3Dforecasting_horizon%2C%0A%20%20%20%20%20%20%20%20coverage_rates%3Dcoverage_rates%2C%0A%20%20%20%20)%0A%20%20%20%20_y_point%20%3D%20conformal.predict(forecasting_horizon%3Dforecasting_horizon)%0A%20%20%20%20y_pred_int%20%3D%20y_pred_int.hstack(_y_point.drop(%22time%22%2C%20%22vintage_time%22))%0A%0A%20%20%20%20print(f%22Prediction%20columns%3A%20%7By_pred_int.columns%7D%22)%0A%20%20%20%20y_pred_int.head()%0A%20%20%20%20return%20conformal%2C%20coverage_rates%2C%20y_pred_int%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5B%60plot_forecast%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.forecasting.plot_forecast%2F)%20renders%20the%20prediction%20intervals%20as%20shaded%20bands%20around%0A%20%20%20%20the%20point%20forecast%2C%20with%20separate%20bands%20for%20each%20coverage%20rate.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(coverage_rates%2C%20plot_forecast%2C%20y_pred_int%2C%20y_test%2C%20y_train)%3A%0A%20%20%20%20plot_forecast(%0A%20%20%20%20%20%20%20%20y_test%2C%0A%20%20%20%20%20%20%20%20y_pred_int%2C%0A%20%20%20%20%20%20%20%20y_train%3Dy_train%2C%0A%20%20%20%20%20%20%20%20coverage_rates%3Dcoverage_rates%2C%0A%20%20%20%20%20%20%20%20title%3D%22Split%20Conformal%20Prediction%20Intervals%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%203.%20Evaluating%20Interval%20Quality%0A%0A%20%20%20%20-%20%5B%60EmpiricalCoverage%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.metrics.interval.EmpiricalCoverage%2F)%3A%20Checks%20if%20actual%20coverage%20matches%20nominal%20(e.g.%2C%2095%25)%0A%20%20%20%20-%20%5B%60IntervalScore%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.metrics.interval.IntervalScore%2F)%3A%20Penalizes%20wide%20intervals%20and%20miscoverage%0A%20%20%20%20-%20%5B%60MeanIntervalWidth%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.metrics.interval.MeanIntervalWidth%2F)%3A%20Average%20interval%20width%20(narrower%20%3D%20better%2C%20given%20coverage)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20EmpiricalCoverage%2C%0A%20%20%20%20IntervalScore%2C%0A%20%20%20%20MeanIntervalWidth%2C%0A%20%20%20%20coverage_rates%2C%0A%20%20%20%20y_pred_int%2C%0A%20%20%20%20y_test%2C%0A%20%20%20%20y_train%2C%0A)%3A%0A%20%20%20%20for%20_scorer_cls%20in%20%5BEmpiricalCoverage%2C%20IntervalScore%2C%20MeanIntervalWidth%5D%3A%0A%20%20%20%20%20%20%20%20_scorer%20%3D%20_scorer_cls(coverage_rates%3Dcoverage_rates)%0A%20%20%20%20%20%20%20%20_scorer.fit(y_train)%0A%20%20%20%20%20%20%20%20_score%20%3D%20_scorer.score(y_test%2C%20y_pred_int)%0A%20%20%20%20%20%20%20%20print(f%22%7B_scorer_cls.__name__%7D%3A%20%7B_score%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20Conformity%20Scorers%0A%0A%20%20%20%20The%20conformity%20scorer%20determines%20how%20prediction%20errors%20are%20measured%3A%0A%0A%20%20%20%20-%20%60Residual()%60%3A%20Raw%20residuals%20(%24y%20-%20%5Chat%7By%7D%24)%3A%20symmetric%20intervals%0A%20%20%20%20-%20%60AbsoluteResidual()%60%3A%20%24%7Cy%20-%20%5Chat%7By%7D%7C%24%3A%20default%2C%20symmetric%0A%20%20%20%20-%20%60GammaResidual()%60%3A%20%24%7Cy%20-%20%5Chat%7By%7D%7C%20%2F%20%5Chat%7By%7D%24%3A%20scale-adaptive%2C%20wider%20intervals%20where%20predictions%20are%20larger%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20AbsoluteResidual%2C%0A%20%20%20%20EmpiricalCoverage%2C%0A%20%20%20%20GammaResidual%2C%0A%20%20%20%20LagTransformer%2C%0A%20%20%20%20MeanIntervalWidth%2C%0A%20%20%20%20PointReductionForecaster%2C%0A%20%20%20%20Residual%2C%0A%20%20%20%20Ridge%2C%0A%20%20%20%20SplitConformalForecaster%2C%0A%20%20%20%20forecasting_horizon%2C%0A%20%20%20%20y_test%2C%0A%20%20%20%20y_train%2C%0A)%3A%0A%20%20%20%20scorer_results%20%3D%20%7B%7D%0A%20%20%20%20for%20_name%2C%20_scorer_cls%20in%20%5B%0A%20%20%20%20%20%20%20%20(%22Residual%22%2C%20Residual)%2C%0A%20%20%20%20%20%20%20%20(%22AbsoluteResidual%22%2C%20AbsoluteResidual)%2C%0A%20%20%20%20%20%20%20%20(%22GammaResidual%22%2C%20GammaResidual)%2C%0A%20%20%20%20%5D%3A%0A%20%20%20%20%20%20%20%20_cf%20%3D%20SplitConformalForecaster(%0A%20%20%20%20%20%20%20%20%20%20%20%20point_forecaster%3DPointReductionForecaster(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20estimator%3DRidge()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20feature_transformer%3DLagTransformer(lag%3Dlist(range(1%2C%2013)))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20calibration_size%3D30%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20conformity_scorer%3D_scorer_cls()%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_cf.fit(y_train%2C%20forecasting_horizon%3Dforecasting_horizon)%0A%20%20%20%20%20%20%20%20_pred%20%3D%20_cf.predict_interval(%0A%20%20%20%20%20%20%20%20%20%20%20%20forecasting_horizon%3Dforecasting_horizon%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20coverage_rates%3D%5B0.9%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20_cov%20%3D%20EmpiricalCoverage(coverage_rates%3D%5B0.9%5D)%0A%20%20%20%20%20%20%20%20_cov.fit(y_train)%0A%20%20%20%20%20%20%20%20_coverage%20%3D%20_cov.score(y_test%2C%20_pred)%0A%0A%20%20%20%20%20%20%20%20_width%20%3D%20MeanIntervalWidth(coverage_rates%3D%5B0.9%5D)%0A%20%20%20%20%20%20%20%20_width.fit(y_train)%0A%20%20%20%20%20%20%20%20_avg_width%20%3D%20_width.score(y_test%2C%20_pred)%0A%0A%20%20%20%20%20%20%20%20scorer_results%5B_name%5D%20%3D%20%7B%22pred%22%3A%20_pred%2C%20%22coverage%22%3A%20_coverage%2C%20%22width%22%3A%20_avg_width%7D%0A%20%20%20%20%20%20%20%20print(f%22%7B_name%3A%3E20s%7D%20%20coverage_rates%3D%7B_coverage%7D%20%20width%3D%7B_avg_width%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%205.%20Using%20SeasonalNaive%20as%20Base%0A%0A%20%20%20%20Conformal%20intervals%20work%20with%20**any**%20point%20forecaster%2C%20including%20%5B%60SeasonalNaive%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.point.naive.SeasonalNaive%2F).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SeasonalNaive%2C%20SplitConformalForecaster%2C%20forecasting_horizon%2C%20y_train)%3A%0A%20%20%20%20conformal_naive%20%3D%20SplitConformalForecaster(%0A%20%20%20%20%20%20%20%20point_forecaster%3DSeasonalNaive(seasonality%3D12)%2C%0A%20%20%20%20%20%20%20%20calibration_size%3D24%2C%0A%20%20%20%20)%0A%20%20%20%20conformal_naive.fit(y_train%2C%20forecasting_horizon%3Dforecasting_horizon)%0A%0A%20%20%20%20y_pred_naive_int%20%3D%20conformal_naive.predict_interval(%0A%20%20%20%20%20%20%20%20forecasting_horizon%3Dforecasting_horizon%2C%0A%20%20%20%20%20%20%20%20coverage_rates%3D%5B0.9%5D%2C%0A%20%20%20%20)%0A%20%20%20%20_y_point%20%3D%20conformal_naive.predict(forecasting_horizon%3Dforecasting_horizon)%0A%20%20%20%20y_pred_naive_int%20%3D%20y_pred_naive_int.hstack(_y_point.drop(%22time%22%2C%20%22vintage_time%22))%0A%20%20%20%20y_pred_naive_int.head()%0A%20%20%20%20return%20(y_pred_naive_int%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5B%60plot_forecast%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.forecasting.plot_forecast%2F)%20shows%20how%20%5B%60SeasonalNaive%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.point.naive.SeasonalNaive%2F)-based%20conformal%20intervals%0A%20%20%20%20compare%20visually%20to%20the%20Ridge-based%20intervals%20above.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plot_forecast%2C%20y_pred_naive_int%2C%20y_test%2C%20y_train)%3A%0A%20%20%20%20plot_forecast(%0A%20%20%20%20%20%20%20%20y_test%2C%0A%20%20%20%20%20%20%20%20y_pred_naive_int%2C%0A%20%20%20%20%20%20%20%20y_train%3Dy_train%2C%0A%20%20%20%20%20%20%20%20coverage_rates%3D%5B0.9%5D%2C%0A%20%20%20%20%20%20%20%20title%3D%22Conformal%20Intervals%20on%20SeasonalNaive%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Multi-vintage%20Scoring%0A%0A%20%20%20%20The%20%60observe_predict_interval%60%20method%20with%20%60stride%3D1%60%20produces%20one%0A%20%20%20%20interval%20forecast%20per%20observation%20point%2C%20creating%20multiple%20*vintages*.%0A%20%20%20%20Each%20vintage%20represents%20a%20different%20forecast%20origin%2C%20so%20you%20can%20analyse%0A%20%20%20%20how%20interval%20quality%20evolves%20as%20the%20model%20absorbs%20more%20data.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(conformal%2C%20coverage_rates%2C%20deepcopy%2C%20forecasting_horizon%2C%20y_test)%3A%0A%20%20%20%20_vintage_model%20%3D%20deepcopy(conformal)%0A%20%20%20%20y_pred_vintages%20%3D%20_vintage_model.observe_predict_interval(%0A%20%20%20%20%20%20%20%20y%3Dy_test%2C%0A%20%20%20%20%20%20%20%20stride%3D1%2C%0A%20%20%20%20%20%20%20%20forecasting_horizon%3Dforecasting_horizon%2C%0A%20%20%20%20%20%20%20%20coverage_rates%3Dcoverage_rates%2C%0A%20%20%20%20)%0A%20%20%20%20print(f%22Vintages%3A%20%7By_pred_vintages%5B'vintage_time'%5D.n_unique()%7D%22)%0A%20%20%20%20y_pred_vintages.head(10)%0A%20%20%20%20return%20(y_pred_vintages%2C)%0A%0A%0A%40app.cell%0Adef%20_(IntervalScore%2C%20y_train)%3A%0A%20%20%20%20vintage_scorer%20%3D%20IntervalScore()%0A%20%20%20%20vintage_scorer.fit(y_train)%0A%20%20%20%20return%20(vintage_scorer%2C)%0A%0A%0A%40app.cell%0Adef%20_(plot_score_time_series%2C%20vintage_scorer%2C%20y_pred_vintages%2C%20y_test)%3A%0A%20%20%20%20plot_score_time_series(%0A%20%20%20%20%20%20%20%20vintage_scorer%2C%0A%20%20%20%20%20%20%20%20y_test%2C%0A%20%20%20%20%20%20%20%20y_pred_vintages%2C%0A%20%20%20%20%20%20%20%20title%3D%22Interval%20Score%20over%20Time%22%2C%0A%20%20%20%20%20%20%20%20y_label%3D%22Interval%20Score%22%2C%0A%20%20%20%20%20%20%20%20height%3D380%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plot_score_per_vintage%2C%20vintage_scorer%2C%20y_pred_vintages%2C%20y_test)%3A%0A%20%20%20%20plot_score_per_vintage(%0A%20%20%20%20%20%20%20%20vintage_scorer%2C%0A%20%20%20%20%20%20%20%20y_test%2C%0A%20%20%20%20%20%20%20%20y_pred_vintages%2C%0A%20%20%20%20%20%20%20%20title%3D%22Interval%20Score%20per%20Vintage%22%2C%0A%20%20%20%20%20%20%20%20y_label%3D%22Interval%20Score%22%2C%0A%20%20%20%20%20%20%20%20height%3D380%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Next%20Steps%0A%0A%20%20%20%20-%20**Interval%20reduction**%3A%20See%20%5B%60interval_reduction.py%60%5D(%2Fexamples%2Fforecasting-models%2Finterval_reduction%2F)%20for%20quantile%20regression%20intervals%0A%20%20%20%20-%20**Scoring**%3A%20See%20%5BMetrics%5D(%2Fexamples%2F%23metrics)%20for%20comprehensive%20interval%20evaluation%0A%20%20%20%20-%20**Calibration%20plots**%3A%20See%20%5BPlotting%5D(%2Fexamples%2F%23plotting)%20for%20%5B%60plot_calibration%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.evaluation.plot_calibration%2F)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
0899ec1ac07b3d90c285817713963363