%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%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_()%3A%0A%0A%20%20%20%20from%20yohou.datasets%20import%20fetch_tourism_monthly%0A%20%20%20%20from%20yohou.metrics%20import%20MeanAbsoluteError%0A%20%20%20%20from%20yohou.model_selection%20import%20(%0A%20%20%20%20%20%20%20%20ExpandingWindowSplitter%2C%0A%20%20%20%20%20%20%20%20GridSearchCV%2C%0A%20%20%20%20%20%20%20%20SlidingWindowSplitter%2C%0A%20%20%20%20)%0A%20%20%20%20from%20yohou.plotting%20import%20plot_cv_results_scatter%2C%20plot_splits%0A%20%20%20%20from%20yohou.point%20import%20SeasonalNaive%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20ExpandingWindowSplitter%2C%0A%20%20%20%20%20%20%20%20GridSearchCV%2C%0A%20%20%20%20%20%20%20%20MeanAbsoluteError%2C%0A%20%20%20%20%20%20%20%20SeasonalNaive%2C%0A%20%20%20%20%20%20%20%20SlidingWindowSplitter%2C%0A%20%20%20%20%20%20%20%20fetch_tourism_monthly%2C%0A%20%20%20%20%20%20%20%20plot_cv_results_scatter%2C%0A%20%20%20%20%20%20%20%20plot_splits%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%20Model%20Selection%20Visualization%0A%0A%20%20%20%20**Prerequisites%3A**%20Familiarity%20with%20cross-validation%20concepts.%20See%20%60examples%2Fcross_validation.py%60%0A%20%20%20%20for%20a%20detailed%20introduction.%0A%20%20%20%20%22%22%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%20Load%20Data%0A%0A%20%20%20%20We%20load%20the%20Monthly%20Tourism%20dataset%20via%20%5B%60fetch_tourism_monthly%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.datasets._fetchers.fetch_tourism_monthly%2F)%20and%20extract%0A%20%20%20%20a%20single%20univariate%20series%20for%20the%20cross-validation%20and%20search%20demonstrations.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(fetch_tourism_monthly)%3A%0A%20%20%20%20tourism%20%3D%20(%0A%20%20%20%20%20%20%20%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%20%20%20%20)%0A%20%20%20%20return%20(tourism%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%23%201.%20Cross-Validation%20Splits%0A%0A%20%20%20%20%5B%60plot_splits%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.model_selection.plot_splits%2F)%20renders%20each%20fold%20as%20a%20horizontal%20bar%2C%20with%20colour-coded%0A%20%20%20%20train%2C%20test%2C%20and%20optional%20gap%20segments.%20Vary%20the%20splitter%20type%2C%20number%0A%20%20%20%20of%20splits%2C%20and%20custom%20colours.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ExpandingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20ExpandingWindowSplitter(n_splits%3D3%2C%20test_size%3D12)%2C%0A%20%20%20%20%20%20%20%20title%3D%22Expanding%20Window%20-%203%20Folds%2C%2012-Step%20Test%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ExpandingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20ExpandingWindowSplitter(n_splits%3D5%2C%20test_size%3D12)%2C%0A%20%20%20%20%20%20%20%20title%3D%22Expanding%20Window%20-%205%20Folds%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SlidingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20SlidingWindowSplitter(n_splits%3D5%2C%20test_size%3D12)%2C%0A%20%20%20%20%20%20%20%20title%3D%22Sliding%20Window%20-%205%20Folds%20%2F%2012%20Test%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SlidingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20SlidingWindowSplitter(n_splits%3D5%2C%20test_size%3D12%2C%20stride%3D6)%2C%0A%20%20%20%20%20%20%20%20title%3D%22Sliding%20Window%20-%20Stride%206%20(Overlapping)%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ExpandingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20ExpandingWindowSplitter(n_splits%3D3%2C%20test_size%3D12)%2C%0A%20%20%20%20%20%20%20%20train_color%3D%22%23059669%22%2C%0A%20%20%20%20%20%20%20%20test_color%3D%22%23dc2626%22%2C%0A%20%20%20%20%20%20%20%20title%3D%22Expanding%20Window%20-%20Custom%20Colours%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SlidingWindowSplitter%2C%20plot_splits%2C%20tourism)%3A%0A%20%20%20%20plot_splits(%0A%20%20%20%20%20%20%20%20tourism%2C%0A%20%20%20%20%20%20%20%20SlidingWindowSplitter(n_splits%3D3%2C%20test_size%3D12)%2C%0A%20%20%20%20%20%20%20%20title%3D%22Sliding%20Window%20-%203%20Folds%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%202.%20Hyperparameter%20Search%20Results%0A%0A%20%20%20%20%5B%60plot_cv_results_scatter%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.model_selection.plot_cv_results_scatter%2F)%20visualises%20the%20relationship%20between%20a%0A%20%20%20%20hyperparameter%20and%20the%20cross-validation%20score.%20We%20first%20run%20a%0A%20%20%20%20%5B%60GridSearchCV%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.model_selection.search.GridSearchCV%2F)%20over%20%5B%60SeasonalNaive%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.point.naive.SeasonalNaive%2F)%20with%20varying%20%60seasonality%60%20values%2C%0A%20%20%20%20using%20%5B%60ExpandingWindowSplitter%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.model_selection.split.ExpandingWindowSplitter%2F)%20for%20temporal%20CV%20and%20%5B%60MeanAbsoluteError%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.metrics.point.MeanAbsoluteError%2F)%0A%20%20%20%20as%20the%20scorer.%20The%20resulting%20%60cv_results_%60%20dictionary%20is%20then%20passed%0A%20%20%20%20to%20%5B%60plot_cv_results_scatter%60%5D(%2Fpages%2Fapi%2Fgenerated%2Fyohou.plotting.model_selection.plot_cv_results_scatter%2F)%20to%20inspect%20score%20sensitivity.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20ExpandingWindowSplitter%2C%0A%20%20%20%20GridSearchCV%2C%0A%20%20%20%20MeanAbsoluteError%2C%0A%20%20%20%20SeasonalNaive%2C%0A%20%20%20%20tourism%2C%0A)%3A%0A%20%20%20%20fh%20%3D%2012%0A%0A%20%20%20%20from%20yohou.model_selection%20import%20train_test_split%20as%20_tts%0A%0A%20%20%20%20y_train%2C%20_%20%3D%20_tts(tourism%2C%20test_size%3Dfh)%0A%0A%20%20%20%20search%20%3D%20GridSearchCV(%0A%20%20%20%20%20%20%20%20forecaster%3DSeasonalNaive()%2C%0A%20%20%20%20%20%20%20%20cv%3DExpandingWindowSplitter(n_splits%3D3%2C%20test_size%3Dfh)%2C%0A%20%20%20%20%20%20%20%20param_grid%3D%7B%22seasonality%22%3A%20%5B3%2C%206%2C%2012%2C%2024%5D%7D%2C%0A%20%20%20%20%20%20%20%20scoring%3DMeanAbsoluteError()%2C%0A%20%20%20%20)%0A%20%20%20%20search.fit(y_train%2C%20forecasting_horizon%3Dfh)%0A%20%20%20%20cv_results%20%3D%20search.cv_results_%0A%20%20%20%20return%20(cv_results%2C)%0A%0A%0A%40app.cell%0Adef%20_(cv_results%2C%20plot_cv_results_scatter)%3A%0A%20%20%20%20plot_cv_results_scatter(%0A%20%20%20%20%20%20%20%20cv_results%2C%0A%20%20%20%20%20%20%20%20param_name%3D%22seasonality%22%2C%0A%20%20%20%20%20%20%20%20title%3D%22CV%20Results%20-%20Default%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cv_results%2C%20plot_cv_results_scatter)%3A%0A%20%20%20%20plot_cv_results_scatter(%0A%20%20%20%20%20%20%20%20cv_results%2C%0A%20%20%20%20%20%20%20%20param_name%3D%22seasonality%22%2C%0A%20%20%20%20%20%20%20%20highlight_best%3DFalse%2C%0A%20%20%20%20%20%20%20%20title%3D%22CV%20Results%20-%20No%20Best%20Highlight%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cv_results%2C%20plot_cv_results_scatter)%3A%0A%20%20%20%20plot_cv_results_scatter(%0A%20%20%20%20%20%20%20%20cv_results%2C%0A%20%20%20%20%20%20%20%20param_name%3D%22seasonality%22%2C%0A%20%20%20%20%20%20%20%20show_std%3DFalse%2C%0A%20%20%20%20%20%20%20%20title%3D%22CV%20Results%20-%20No%20Error%20Bars%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cv_results%2C%20plot_cv_results_scatter)%3A%0A%20%20%20%20plot_cv_results_scatter(%0A%20%20%20%20%20%20%20%20cv_results%2C%0A%20%20%20%20%20%20%20%20param_name%3D%22seasonality%22%2C%0A%20%20%20%20%20%20%20%20best_marker_color%3D%22%23059669%22%2C%0A%20%20%20%20%20%20%20%20marker_size%3D14.0%2C%0A%20%20%20%20%20%20%20%20title%3D%22CV%20Results%20-%20Custom%20Marker%20Style%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%20Next%20Steps%0A%0A%20%20%20%20-%20**Evaluation**%3A%20See%20%5B%60examples%2Fplotting%2Fevaluation.py%60%5D(%2Fexamples%2Fvisualization%2Fevaluation%2F)%20for%20residual%20and%20score%20distribution%20plots%0A%20%20%20%20-%20**Forecasting**%3A%20See%20%5B%60examples%2Fplotting%2Fforecasting_visualization.py%60%5D(%2Fexamples%2Fvisualization%2Fforecasting_visualization%2F)%20for%20forecast%20and%20comparison%20plots%0A%20%20%20%20-%20**Similarity**%3A%20See%20%60examples%2Fplotting%2Fsimilarity_heatmap.py%60%20for%20distance-based%20interval%20weights%0A%20%20%20%20-%20**Signal%20processing**%3A%20See%20%5B%60examples%2Fplotting%2Fsignal_processing.py%60%5D(%2Fexamples%2Fvisualization%2Fsignal_processing%2F)%20for%20spectrum%20and%20phase%20analysis%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
b7dcbd615f7e54a25a647be74dbbe08b