Repository: sintel-dev/Draco (language: python)

Issue:
Reorganize pipelines
Reorganize pipelines from types to be named pipelines.

**Original organization**
```
draco/pipelines
  ├── classes
      ├── normalize_dfs_xgb_classifier.json
      ├── unstack_dfs_xgb_classifier.json
      ├── unstack_double_lstm_timeseries_classifier.json
      ├── unstack_lstm_timeseries_classifier.json
      └── unstack_normalize_dfs_xgb_classifier.json
  ├── probability
      ├── normalize_dfs_xgb_classifier.json
      ├── unstack_dfs_xgb_classifier.json
      ├── unstack_double_lstm_timeseries_classifier.json
      ├── unstack_lstm_timeseries_classifier.json
      └── unstack_normalize_dfs_xgb_classifier.json
  ├── unstacked
      ├── unstacked_dfs_xgb_classifier.json
      ├── unstacked_double_lstm_timeseries_classifier.json
      ├── unstacked_lstm_timeseries_classifier.json
      └── unstacked_normalize_dfs_xgb_classifier.json
```

**Proposed organization**
```
draco/pipelines
  ├── dfs_xgb
      ├── dfs_xgb.json
      ├── dfs_xgb_with_unstack.json
      ├── dfs_xgb_with_double_normalization.json
      └── dfs_xgb_with_unstack_normalization.json
  ├── lstm
      ├── lstm.json
      └── lstm_with_unstack.json
  ├── double_lstm
      ├── double_lstm.json
      └── double_lstm_with_unstack.json
```

In addition, for each pipeline, create a documentation page describing the pipeline.



Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index fe2c47a..b4e035b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -112,3 +112,5 @@ notebooks-private/
 scripts/
 dask-worker-space/
 tutorials/*.pkl
+
+*.DS_Store
diff --git a/README.md b/README.md
index 70eb0fe..2d398e4 100644
--- a/README.md
+++ b/README.md
@@ -220,18 +220,18 @@ The returned `pipeline` variable will be `list` containing the names of all the
 available in the Draco system:
 
 ```
-['classes.unstack_double_lstm_timeseries_classifier',
- 'classes.unstack_lstm_timeseries_classifier',
- 'classes.unstack_normalize_dfs_xgb_classifier',
- 'classes.unstack_dfs_xgb_classifier',
- 'classes.normalize_dfs_xgb_classifier']
+['dfs_xgb',
+ 'dfs_xgb_with_unstack',
+ 'dfs_xgb_with_normalization',
+ 'dfs_xgb_with_unstack_normalization',
+ 'dfs_xgb_prob_with_unstack_normalization']
 ```
 
 For the rest of this tutorial, we will select and use the pipeline
-`classes.normalize_dfs_xgb_classifier` as our template.
+`dfs_xgb_with_unstack_normalization` as our template.
 
 ```python3
-pipeline_name = 'classes.normalize_dfs_xgb_classifier'
+pipeline_name = 'dfs_xgb_with_unstack_normalization'
 ```
 
 ## 3. Fitting the Pipeline
diff --git a/draco/__init__.py b/draco/__init__.py
index db53888..a1a5e8a 100644
--- a/draco/__init__.py
+++ b/draco/__init__.py
@@ -11,9 +11,11 @@
 from draco.pipeline import DracoPipeline, get_pipelines
 
 _BASE_PATH = os.path.abspath(os.path.dirname(__file__))
-MLBLOCKS_PIPELINES = os.path.join(_BASE_PATH, 'pipelines')
 MLBLOCKS_PRIMITIVES = os.path.join(_BASE_PATH, 'primitives')
-
+MLBLOCKS_PIPELINES = tuple(
+    dirname
+    for dirname, _, _ in os.walk(os.path.join(_BASE_PATH, 'pipelines'))
+)
 
 __all__ = (
     'DracoPipeline',
diff --git a/draco/demo.py b/draco/demo.py
index f7848e5..dcd4126 100644
--- a/draco/demo.py
+++ b/draco/demo.py
@@ -10,6 +10,17 @@
 S3_URL = 'https://d3-ai-greenguard.s3.amazonaws.com/'
 DEMO_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'demo')
 
+_FILES = {
+    'DEFAULT': [
+        ('target_times', 'cutoff_time'),
+        ('readings', 'timestamp')
+    ],
+    'RUL': [
+        ('rul_train_target_times', 'cutoff_time'),
+        ('rul_test_target_times', 'cutoff_time'),
+        ('rul_readings', 'timestamp')
+    ]
+}
 
 def _load_or_download(filename, dates):
     filename += '.csv.gz'
@@ -27,23 +38,35 @@ def _load_or_download(filename, dates):
     return data
 
 
-def load_demo(load_readings=True):
+def load_demo(name='default', load_readings=True):
     """Load the demo included in the Draco project.
 
     The first time that this function is executed, the data will be downloaded
     and cached inside the `draco/demo` folder.
     Subsequent calls will load the cached data instead of downloading it again.
+    
+    Args:
+        rul (str):
+            Name of the dataset to load. If "RUL", load NASA's CMAPSS dataset
+            https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#turbofan.
+            If "default" then load default demo.
+        load_readings (bool):
+            Whether to load the ``readings`` table or not.
 
     Returns:
         tuple[pandas.DataFrame]:
             target_times and readings tables
     """
-    target_times = _load_or_download('target_times', 'cutoff_time')
-    if load_readings:
-        readings = _load_or_download('readings', 'timestamp')
-        return target_times, readings
+    files = _FILES[name.upper()]
 
-    return target_times
+    if not load_readings:
+        files = files[:-1]
+
+    output = list()
+    for filename, dates in files:
+        output.append(_load_or_download(filename, dates))
+
+    return tuple(output)
 
 
 def generate_raw_readings(output_path='demo'):
diff --git a/draco/pipeline.py b/draco/pipeline.py
index b50567b..98fb3d7 100644
--- a/draco/pipeline.py
+++ b/draco/pipeline.py
@@ -54,7 +54,7 @@ def __setstate__(self, state):
 Sequential.__setstate__ = __setstate__
 
 
-def get_pipelines(pattern='', path=False, pipeline_type='classes'):
+def get_pipelines(pattern='', path=False, pipeline_type=None):
     """Get the list of available pipelines.
 
     Optionally filter the names using a patter or obtain
@@ -66,9 +66,8 @@ def get_pipelines(pattern='', path=False, pipeline_type='classes'):
         path (bool):
             Whether to return a dictionary containing the pipeline
             paths instead of only a list with the names.
-        pipeline_type (str):
-            The pipeline category to filter by (`classes`, `probability` and `unstacked`).
-            Defaults to `classes`.
+        pipeline_type (str or list[str]):
+            The pipeline category to filter. Defaults to `None`.
 
     Return:
         list or dict:
@@ -76,15 +75,24 @@ def get_pipelines(pattern='', path=False, pipeline_type='classes'):
             If `path=True`, return a dict containing the pipeline
             names as keys and their absolute paths as values.
     """
+    if isinstance(pipeline_type, str):
+        pipeline_type = [pipeline_type]
+    elif pipeline_type is None:
+        pipeline_type = os.listdir(PIPELINES_DIR)
+    
     pipelines = dict()
-    pipelines_dir = os.path.join(PIPELINES_DIR, pipeline_type)
-
-    for filename in os.listdir(pipelines_dir):
-        if filename.endswith('.json') and pattern in filename:
-            name = os.path.basename(filename)[:-len('.json')]
-            name = f'{pipeline_type}.{name}'
-            pipeline_path = os.path.join(pipelines_dir, filename)
-            pipelines[name] = pipeline_path
+    pipelines_dir = [
+        os.path.join(PIPELINES_DIR, ptype)
+        for ptype in pipeline_type
+        if ptype != 'preprocessing'
+    ]
+
+    for pdir in pipelines_dir:
+        for filename in os.listdir(pdir):
+            if filename.endswith('.json') and pattern in filename:
+                name = os.path.basename(filename)[:-len('.json')]
+                pipeline_path = os.path.join(pdir, filename)
+                pipelines[name] = pipeline_path
 
     if not path:
         pipelines = list(pipelines)
diff --git a/draco/pipelines/classes/normalize_dfs_xgb_classifier.json b/draco/pipelines/classes/normalize_dfs_xgb_classifier.json
deleted file mode 100644
index 8039d12..0000000
--- a/draco/pipelines/classes/normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.EntitySet.normalize_entity#2": {
-            "base_entity_id": "readings",
-            "new_entity_id": "signals",
-            "index": "signal_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": false,
-            "n_jobs": 1,
-            "training_window": "1d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/classes/unstack_dfs_xgb_classifier.json b/draco/pipelines/classes/unstack_dfs_xgb_classifier.json
deleted file mode 100644
index 60be686..0000000
--- a/draco/pipelines/classes/unstack_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "entity_id": "turbines",
-            "index": "turbine_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.add_relationship#1": {
-            "parent": "turbines",
-            "parent_column": "turbine_id",
-            "child": "readings",
-            "child_column": "turbine_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "1d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/classes/unstack_normalize_dfs_xgb_classifier.json b/draco/pipelines/classes/unstack_normalize_dfs_xgb_classifier.json
deleted file mode 100644
index 5c82d77..0000000
--- a/draco/pipelines/classes/unstack_normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": false,
-            "n_jobs": 1,
-            "training_window": "1d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb.json b/draco/pipelines/dfs_xgb/dfs_xgb.json
new file mode 100644
index 0000000..4cb3cbf
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb.json
@@ -0,0 +1,29 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.entity_dataframe"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "dataframe": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_double_normalization.json b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_double_normalization.json
new file mode 100644
index 0000000..4231115
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_double_normalization.json
@@ -0,0 +1,42 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier:probabilities",
+        "numpy.take"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.double_entity_normalization",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "featuretools.EntitySet.entity_from_dataframe#1": {
+                    "dataframe": "readings"
+                }
+            }
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        },
+        "numpy.take#1": {
+            "indices": 1,
+            "axis": 1
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack.json b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack.json
new file mode 100644
index 0000000..03ef141
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack.json
@@ -0,0 +1,50 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier:probabilities",
+        "numpy.take"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
+        },
+        "mlblocks.MLPipeline#2": {
+            "pipeline": "preprocessing.entity_dataframe"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        },
+        "numpy.take#1": {
+            "indices": 1,
+            "axis": 1
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        },
+        "mlblocks.MLPipeline#2": {
+            "dataframe": "readings",
+            "turbines": "turbines"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack_normalization.json b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack_normalization.json
new file mode 100644
index 0000000..ca0c4fa
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack_normalization.json
@@ -0,0 +1,49 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier:probabilities",
+        "numpy.take"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
+        },
+        "mlblocks.MLPipeline#2": {
+            "pipeline": "preprocessing.entity_normalization"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        },
+        "numpy.take#1": {
+            "indices": 1,
+            "axis": 1
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        },
+        "mlblocks.MLPipeline#2": {
+            "dataframe": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_with_double_normalization.json b/draco/pipelines/dfs_xgb/dfs_xgb_with_double_normalization.json
new file mode 100644
index 0000000..82ae325
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_with_double_normalization.json
@@ -0,0 +1,37 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.double_entity_normalization",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "featuretools.EntitySet.entity_from_dataframe#1": {
+                    "dataframe": "readings"
+                }
+            }
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_with_normalization.json b/draco/pipelines/dfs_xgb/dfs_xgb_with_normalization.json
new file mode 100644
index 0000000..d9d7911
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_with_normalization.json
@@ -0,0 +1,29 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.entity_normalization"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "dataframe": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack.json b/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack.json
new file mode 100644
index 0000000..dd01f23
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack.json
@@ -0,0 +1,45 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
+        },
+        "mlblocks.MLPipeline#2": {
+            "pipeline": "preprocessing.entity_dataframe"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        },
+        "mlblocks.MLPipeline#2": {
+            "dataframe": "readings",
+            "turbines": "turbines"
+        }
+    }
+}
diff --git a/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack_normalization.json b/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack_normalization.json
new file mode 100644
index 0000000..87e6999
--- /dev/null
+++ b/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack_normalization.json
@@ -0,0 +1,44 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "mlblocks.MLPipeline",
+        "featuretools.dfs",
+        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
+        "xgboost.XGBClassifier"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "preprocessing.unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
+        },
+        "mlblocks.MLPipeline#2": {
+            "pipeline": "preprocessing.entity_normalization"
+        },
+        "featuretools.dfs#1": {
+            "target_entity": "turbines",
+            "index": "turbine_id",
+            "time_index": "cutoff_time",
+            "encode": false,
+            "max_depth": -1,
+            "copy": true,
+            "verbose": false,
+            "n_jobs": 1,
+            "training_window": "1d"
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        },
+        "mlblocks.MLPipeline#2": {
+            "dataframe": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/disabled/dfs_xgb_classifier.json b/draco/pipelines/disabled/dfs_xgb_classifier.json
deleted file mode 100644
index f725e3b..0000000
--- a/draco/pipelines/disabled/dfs_xgb_classifier.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-    "primitives": [
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "entity_id": "turbines",
-            "index": "turbine_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.entity_from_dataframe#3": {
-            "entity_id": "signals",
-            "index": "signal_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.add_relationship#1": {
-            "parent": "turbines",
-            "parent_column": "turbine_id",
-            "child": "readings",
-            "child_column": "turbine_id"
-        },
-        "featuretools.EntitySet.add_relationship#2": {
-            "parent": "signals",
-            "parent_column": "signal_id",
-            "child": "readings",
-            "child_column": "signal_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#3": {
-            "dataframe": "signals"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/normalize_dfs_xgb_classifier.json b/draco/pipelines/disabled/normalize_dfs_xgb_classifier.json
deleted file mode 100644
index 0622163..0000000
--- a/draco/pipelines/disabled/normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-    "primitives": [
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.EntitySet.normalize_entity#2": {
-            "base_entity_id": "readings",
-            "new_entity_id": "signals",
-            "index": "signal_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/resample_dfs_xgb_classifier.json b/draco/pipelines/disabled/resample_dfs_xgb_classifier.json
deleted file mode 100644
index 390e0b4..0000000
--- a/draco/pipelines/disabled/resample_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "1h",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "entity_id": "turbines",
-            "index": "turbine_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.entity_from_dataframe#3": {
-            "entity_id": "signals",
-            "index": "signal_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.add_relationship#1": {
-            "parent": "turbines",
-            "parent_column": "turbine_id",
-            "child": "readings",
-            "child_column": "turbine_id"
-        },
-        "featuretools.EntitySet.add_relationship#2": {
-            "parent": "signals",
-            "parent_column": "signal_id",
-            "child": "readings",
-            "child_column": "signal_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#3": {
-            "dataframe": "signals"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/resample_unstack_dfs_xgb_classifier.json b/draco/pipelines/disabled/resample_unstack_dfs_xgb_classifier.json
deleted file mode 100644
index 7775208..0000000
--- a/draco/pipelines/disabled/resample_unstack_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "1h",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "entity_id": "turbines",
-            "index": "turbine_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.add_relationship#1": {
-            "parent": "turbines",
-            "parent_column": "turbine_id",
-            "child": "readings",
-            "child_column": "turbine_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/resample_unstack_double_lstm_timeseries_classifier.json b/draco/pipelines/disabled/resample_unstack_double_lstm_timeseries_classifier.json
deleted file mode 100644
index 75dadc9..0000000
--- a/draco/pipelines/disabled/resample_unstack_double_lstm_timeseries_classifier.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "pandas.DataFrame.pop",
-        "pandas.DataFrame.pop",
-        "sklearn.impute.SimpleImputer",
-        "sklearn.preprocessing.MinMaxScaler",
-        "pandas.DataFrame",
-        "pandas.DataFrame.set",
-        "pandas.DataFrame.set",
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
-        "keras.Sequential.DoubleLSTMTimeSeriesClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "3600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "pandas.DataFrame.pop#1": {
-            "item": "turbine_id"
-        },
-        "pandas.DataFrame.pop#2": {
-            "item": "timestamp"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "feature_range": [
-                -1,
-                1
-            ]
-        },
-        "pandas.DataFrame#1": {
-            "index": null,
-            "columns": null
-        },
-        "pandas.DataFrame.set#1": {
-            "key": "turbine_id"
-        },
-        "pandas.DataFrame.set#2": {
-            "key": "timestamp"
-        },
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "window_size": 72,
-            "cutoff_time": "cutoff_time",
-            "time_index": "timestamp"
-        },
-        "keras.Sequential.DoubleLSTMTimeSeriesClassifier": {
-            "epochs": 20,
-            "verbose": true,
-            "input_shape": [
-                72,
-                97
-            ]
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#2": {
-            "X": "readings"
-        },
-        "sklearn.impute.SimpleImputer#1": {
-            "X": "readings"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.set#1": {
-            "X": "readings",
-            "value": "turbine_id"
-        },
-        "pandas.DataFrame.set#2": {
-            "X": "readings",
-            "value": "timestamp"
-        },
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "timeseries": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#1": {
-            "item": "turbine_id"
-        },
-        "pandas.DataFrame.pop#2": {
-            "item": "timestamp"
-        },
-        "sklearn.impute.SimpleImputer#1": {
-            "X": "readings"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/resample_unstack_lstm_timeseries_classifier.json b/draco/pipelines/disabled/resample_unstack_lstm_timeseries_classifier.json
deleted file mode 100644
index e33e83b..0000000
--- a/draco/pipelines/disabled/resample_unstack_lstm_timeseries_classifier.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "pandas.DataFrame.pop",
-        "pandas.DataFrame.pop",
-        "sklearn.impute.SimpleImputer",
-        "sklearn.preprocessing.MinMaxScaler",
-        "pandas.DataFrame",
-        "pandas.DataFrame.set",
-        "pandas.DataFrame.set",
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
-        "keras.Sequential.LSTMTimeSeriesClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "pandas.DataFrame.pop#1": {
-            "item": "turbine_id"
-        },
-        "pandas.DataFrame.pop#2": {
-            "item": "timestamp"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "feature_range": [
-                -1,
-                1
-            ]
-        },
-        "pandas.DataFrame#1": {
-            "index": null,
-            "columns": null
-        },
-        "pandas.DataFrame.set#1": {
-            "key": "turbine_id"
-        },
-        "pandas.DataFrame.set#2": {
-            "key": "timestamp"
-        },
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "window_size": 144,
-            "cutoff_time": "cutoff_time",
-            "time_index": "timestamp"
-        },
-        "keras.Sequential.LSTMTimeSeriesClassifier": {
-            "epochs": 35,
-            "verbose": true,
-            "input_shape": [
-                144,
-                26
-            ]
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#2": {
-            "X": "readings"
-        },
-        "sklearn.impute.SimpleImputer#1": {
-            "X": "readings"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.set#1": {
-            "X": "readings",
-            "value": "turbine_id"
-        },
-        "pandas.DataFrame.set#2": {
-            "X": "readings",
-            "value": "timestamp"
-        },
-        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "timeseries": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.pop#1": {
-            "item": "turbine_id"
-        },
-        "pandas.DataFrame.pop#2": {
-            "item": "timestamp"
-        },
-        "sklearn.impute.SimpleImputer#1": {
-            "X": "readings"
-        },
-        "sklearn.preprocessing.MinMaxScaler#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/disabled/resample_unstack_normalize_dfs_xgb_classifier.json b/draco/pipelines/disabled/resample_unstack_normalize_dfs_xgb_classifier.json
deleted file mode 100644
index 4cbe1df..0000000
--- a/draco/pipelines/disabled/resample_unstack_normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "1h",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/unstacked/unstacked_double_lstm_timeseries_classifier.json b/draco/pipelines/double_lstm/double_lstm.json
similarity index 91%
rename from draco/pipelines/unstacked/unstacked_double_lstm_timeseries_classifier.json
rename to draco/pipelines/double_lstm/double_lstm.json
index bf3065f..e3be8a5 100644
--- a/draco/pipelines/unstacked/unstacked_double_lstm_timeseries_classifier.json
+++ b/draco/pipelines/double_lstm/double_lstm.json
@@ -34,17 +34,13 @@
             "key": "timestamp"
         },
         "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "window_size": 72,
+            "window_size": 24,
             "cutoff_time": "cutoff_time",
             "time_index": "timestamp"
         },
-        "keras.Sequential.DoubleLSTMTimeSeriesClassifier": {
-            "epochs": 20,
-            "verbose": true,
-            "input_shape": [
-                72,
-                97
-            ]
+        "keras.Sequential.DoubleLSTMTimeSeriesClassifier#1": {
+            "epochs": 35,
+            "verbose": false
         }
     },
     "input_names": {
diff --git a/draco/pipelines/double_lstm/double_lstm_prob.json b/draco/pipelines/double_lstm/double_lstm_prob.json
new file mode 100644
index 0000000..a118af0
--- /dev/null
+++ b/draco/pipelines/double_lstm/double_lstm_prob.json
@@ -0,0 +1,98 @@
+{
+    "primitives": [
+        "pandas.DataFrame.pop",
+        "pandas.DataFrame.pop",
+        "sklearn.impute.SimpleImputer",
+        "sklearn.preprocessing.MinMaxScaler",
+        "pandas.DataFrame",
+        "pandas.DataFrame.set",
+        "pandas.DataFrame.set",
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
+        "keras.Sequential.DoubleLSTMTimeSeriesClassifier",
+        "numpy.take"
+    ],
+    "init_params": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "feature_range": [
+                -1,
+                1
+            ]
+        },
+        "pandas.DataFrame#1": {
+            "index": null,
+            "columns": null
+        },
+        "pandas.DataFrame.set#1": {
+            "key": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "key": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "window_size": 24,
+            "cutoff_time": "cutoff_time",
+            "time_index": "timestamp"
+        },
+        "keras.Sequential.DoubleLSTMTimeSeriesClassifier#1": {
+            "epochs": 35,
+            "verbose": false,
+            "classification": false,
+            "loss": "keras.losses.binary_crossentropy"
+        },
+        "numpy.take#1": {
+            "indices": 1,
+            "axis": 1
+        }
+    },
+    "input_names": {
+        "pandas.DataFrame.pop#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.pop#2": {
+            "X": "readings"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.set#1": {
+            "X": "readings",
+            "value": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "X": "readings",
+            "value": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "timeseries": "readings"
+        }
+    },
+    "output_names": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/probability/unstack_double_lstm_timeseries_classifier.json b/draco/pipelines/double_lstm/double_lstm_prob_with_unstack.json
similarity index 79%
rename from draco/pipelines/probability/unstack_double_lstm_timeseries_classifier.json
rename to draco/pipelines/double_lstm/double_lstm_prob_with_unstack.json
index ea48a87..289a794 100644
--- a/draco/pipelines/probability/unstack_double_lstm_timeseries_classifier.json
+++ b/draco/pipelines/double_lstm/double_lstm_prob_with_unstack.json
@@ -1,7 +1,6 @@
 {
     "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
+        "mlblocks.MLPipeline",
         "pandas.DataFrame.pop",
         "pandas.DataFrame.pop",
         "sklearn.impute.SimpleImputer",
@@ -14,19 +13,16 @@
         "numpy.take"
     ],
     "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "3600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
         },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
@@ -67,10 +63,7 @@
         }
     },
     "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
+        "mlblocks.MLPipeline#1": {
             "X": "readings"
         },
         "pandas.DataFrame.pop#1": {
@@ -101,12 +94,6 @@
         }
     },
     "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
         },
diff --git a/draco/pipelines/classes/unstack_double_lstm_timeseries_classifier.json b/draco/pipelines/double_lstm/double_lstm_with_unstack.json
similarity index 77%
rename from draco/pipelines/classes/unstack_double_lstm_timeseries_classifier.json
rename to draco/pipelines/double_lstm/double_lstm_with_unstack.json
index dede502..1d08259 100644
--- a/draco/pipelines/classes/unstack_double_lstm_timeseries_classifier.json
+++ b/draco/pipelines/double_lstm/double_lstm_with_unstack.json
@@ -1,7 +1,6 @@
 {
     "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
+        "mlblocks.MLPipeline",
         "pandas.DataFrame.pop",
         "pandas.DataFrame.pop",
         "sklearn.impute.SimpleImputer",
@@ -13,19 +12,16 @@
         "keras.Sequential.DoubleLSTMTimeSeriesClassifier"
     ],
     "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "3600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
         },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
@@ -60,10 +56,7 @@
         }
     },
     "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
+        "mlblocks.MLPipeline#1": {
             "X": "readings"
         },
         "pandas.DataFrame.pop#1": {
@@ -94,12 +87,6 @@
         }
     },
     "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
         },
diff --git a/draco/pipelines/unstacked/unstacked_lstm_timeseries_classifier.json b/draco/pipelines/lstm/lstm.json
similarity index 92%
rename from draco/pipelines/unstacked/unstacked_lstm_timeseries_classifier.json
rename to draco/pipelines/lstm/lstm.json
index d2cbed7..c29b1c7 100644
--- a/draco/pipelines/unstacked/unstacked_lstm_timeseries_classifier.json
+++ b/draco/pipelines/lstm/lstm.json
@@ -34,17 +34,13 @@
             "key": "timestamp"
         },
         "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
-            "window_size": 72,
+            "window_size": 24,
             "cutoff_time": "cutoff_time",
             "time_index": "timestamp"
         },
-        "keras.Sequential.LSTMTimeSeriesClassifier": {
+        "keras.Sequential.LSTMTimeSeriesClassifier#1": {
             "epochs": 35,
-            "verbose": true,
-            "input_shape": [
-                72,
-                97
-            ]
+            "verbose": false
         }
     },
     "input_names": {
diff --git a/draco/pipelines/lstm/lstm_prob.json b/draco/pipelines/lstm/lstm_prob.json
new file mode 100644
index 0000000..17da404
--- /dev/null
+++ b/draco/pipelines/lstm/lstm_prob.json
@@ -0,0 +1,98 @@
+{
+    "primitives": [
+        "pandas.DataFrame.pop",
+        "pandas.DataFrame.pop",
+        "sklearn.impute.SimpleImputer",
+        "sklearn.preprocessing.MinMaxScaler",
+        "pandas.DataFrame",
+        "pandas.DataFrame.set",
+        "pandas.DataFrame.set",
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
+        "keras.Sequential.LSTMTimeSeriesClassifier",
+        "numpy.take"
+    ],
+    "init_params": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "feature_range": [
+                -1,
+                1
+            ]
+        },
+        "pandas.DataFrame#1": {
+            "index": null,
+            "columns": null
+        },
+        "pandas.DataFrame.set#1": {
+            "key": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "key": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "window_size": 24,
+            "cutoff_time": "cutoff_time",
+            "time_index": "timestamp"
+        },
+        "keras.Sequential.LSTMTimeSeriesClassifier#1": {
+            "epochs": 35,
+            "verbose": false,
+            "classification": false,
+            "loss": "keras.losses.binary_crossentropy"
+        },
+        "numpy.take#1": {
+            "indices": 1,
+            "axis": 1
+        }
+    },
+    "input_names": {
+        "pandas.DataFrame.pop#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.pop#2": {
+            "X": "readings"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.set#1": {
+            "X": "readings",
+            "value": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "X": "readings",
+            "value": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "timeseries": "readings"
+        }
+    },
+    "output_names": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/probability/unstack_lstm_timeseries_classifier.json b/draco/pipelines/lstm/lstm_prob_with_unstack.json
similarity index 79%
rename from draco/pipelines/probability/unstack_lstm_timeseries_classifier.json
rename to draco/pipelines/lstm/lstm_prob_with_unstack.json
index 9272257..1ad69bc 100644
--- a/draco/pipelines/probability/unstack_lstm_timeseries_classifier.json
+++ b/draco/pipelines/lstm/lstm_prob_with_unstack.json
@@ -1,7 +1,6 @@
 {
     "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
+        "mlblocks.MLPipeline",
         "pandas.DataFrame.pop",
         "pandas.DataFrame.pop",
         "sklearn.impute.SimpleImputer",
@@ -14,19 +13,16 @@
         "numpy.take"
     ],
     "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "3600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
         },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
@@ -67,10 +63,7 @@
         }
     },
     "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
+        "mlblocks.MLPipeline#1": {
             "X": "readings"
         },
         "pandas.DataFrame.pop#1": {
@@ -101,12 +94,6 @@
         }
     },
     "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
         },
diff --git a/draco/pipelines/classes/unstack_lstm_timeseries_classifier.json b/draco/pipelines/lstm/lstm_with_unstack.json
similarity index 77%
rename from draco/pipelines/classes/unstack_lstm_timeseries_classifier.json
rename to draco/pipelines/lstm/lstm_with_unstack.json
index ab9dd99..18c486a 100644
--- a/draco/pipelines/classes/unstack_lstm_timeseries_classifier.json
+++ b/draco/pipelines/lstm/lstm_with_unstack.json
@@ -1,7 +1,6 @@
 {
     "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
+        "mlblocks.MLPipeline",
         "pandas.DataFrame.pop",
         "pandas.DataFrame.pop",
         "sklearn.impute.SimpleImputer",
@@ -13,19 +12,16 @@
         "keras.Sequential.LSTMTimeSeriesClassifier"
     ],
     "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "3600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
         },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
@@ -60,10 +56,7 @@
         }
     },
     "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
+        "mlblocks.MLPipeline#1": {
             "X": "readings"
         },
         "pandas.DataFrame.pop#1": {
@@ -94,12 +87,6 @@
         }
     },
     "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
         "pandas.DataFrame.pop#1": {
             "item": "turbine_id"
         },
diff --git a/draco/pipelines/lstm_regressor/lstm_regressor.json b/draco/pipelines/lstm_regressor/lstm_regressor.json
new file mode 100644
index 0000000..77ddb1e
--- /dev/null
+++ b/draco/pipelines/lstm_regressor/lstm_regressor.json
@@ -0,0 +1,91 @@
+{
+    "primitives": [
+        "pandas.DataFrame.pop",
+        "pandas.DataFrame.pop",
+        "sklearn.impute.SimpleImputer",
+        "sklearn.preprocessing.MinMaxScaler",
+        "pandas.DataFrame",
+        "pandas.DataFrame.set",
+        "pandas.DataFrame.set",
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
+        "keras.Sequential.LSTMTimeSeriesRegressor"
+    ],
+    "init_params": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "feature_range": [
+                -1,
+                1
+            ]
+        },
+        "pandas.DataFrame#1": {
+            "index": null,
+            "columns": null
+        },
+        "pandas.DataFrame.set#1": {
+            "key": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "key": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "window_size": 24,
+            "cutoff_time": "cutoff_time",
+            "time_index": "timestamp"
+        },
+        "keras.Sequential.LSTMTimeSeriesRegressor#1": {
+            "epochs": 35,
+            "verbose": false
+        }
+    },
+    "input_names": {
+        "pandas.DataFrame.pop#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.pop#2": {
+            "X": "readings"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.set#1": {
+            "X": "readings",
+            "value": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "X": "readings",
+            "value": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "timeseries": "readings"
+        }
+    },
+    "output_names": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/lstm_regressor/lstm_regressor_with_unstack.json b/draco/pipelines/lstm_regressor/lstm_regressor_with_unstack.json
new file mode 100644
index 0000000..d546827
--- /dev/null
+++ b/draco/pipelines/lstm_regressor/lstm_regressor_with_unstack.json
@@ -0,0 +1,106 @@
+{
+    "primitives": [
+        "mlblocks.MLPipeline",
+        "pandas.DataFrame.pop",
+        "pandas.DataFrame.pop",
+        "sklearn.impute.SimpleImputer",
+        "sklearn.preprocessing.MinMaxScaler",
+        "pandas.DataFrame",
+        "pandas.DataFrame.set",
+        "pandas.DataFrame.set",
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences",
+        "keras.Sequential.LSTMTimeSeriesRegressor"
+    ],
+    "init_params": {
+        "mlblocks.MLPipeline#1": {
+            "pipeline": "unstack",
+            "input_names": {
+                "pandas.DataFrame.resample#1": {
+                    "X": "df"
+                },
+                "pandas.DataFrame.unstack#1": {
+                    "X": "readings"
+                }
+            }
+        },
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "feature_range": [
+                -1,
+                1
+            ]
+        },
+        "pandas.DataFrame#1": {
+            "index": null,
+            "columns": null
+        },
+        "pandas.DataFrame.set#1": {
+            "key": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "key": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "window_size": 24,
+            "cutoff_time": "cutoff_time",
+            "time_index": "timestamp"
+        },
+        "keras.Sequential.LSTMTimeSeriesRegressor#1": {
+            "epochs": 35,
+            "verbose": false
+        }
+    },
+    "input_names": {
+        "mlblocks.MLPipeline#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.pop#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.pop#2": {
+            "X": "readings"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.set#1": {
+            "X": "readings",
+            "value": "turbine_id"
+        },
+        "pandas.DataFrame.set#2": {
+            "X": "readings",
+            "value": "timestamp"
+        },
+        "mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1": {
+            "timeseries": "readings"
+        }
+    },
+    "output_names": {
+        "pandas.DataFrame.pop#1": {
+            "item": "turbine_id"
+        },
+        "pandas.DataFrame.pop#2": {
+            "item": "timestamp"
+        },
+        "sklearn.impute.SimpleImputer#1": {
+            "X": "readings"
+        },
+        "sklearn.preprocessing.MinMaxScaler#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame#1": {
+            "X": "readings"
+        }
+    }
+}
diff --git a/draco/pipelines/disabled/resample_normalize_dfs_xgb_classifier.json b/draco/pipelines/preprocessing/double_entity_normalization.json
similarity index 73%
rename from draco/pipelines/disabled/resample_normalize_dfs_xgb_classifier.json
rename to draco/pipelines/preprocessing/double_entity_normalization.json
index 3d7d4d2..1438bbe 100644
--- a/draco/pipelines/disabled/resample_normalize_dfs_xgb_classifier.json
+++ b/draco/pipelines/preprocessing/double_entity_normalization.json
@@ -3,10 +3,7 @@
         "pandas.DataFrame.resample",
         "featuretools.EntitySet.entity_from_dataframe",
         "featuretools.EntitySet.normalize_entity",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
+        "featuretools.EntitySet.normalize_entity"
     ],
     "init_params": {
         "pandas.DataFrame.resample#1": {
@@ -36,17 +33,6 @@
             "new_entity_id": "signals",
             "index": "signal_id",
             "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "1d"
         }
     },
     "input_names": {
diff --git a/draco/pipelines/unstacked/unstacked_dfs_xgb_classifier.json b/draco/pipelines/preprocessing/entity_dataframe.json
similarity index 50%
rename from draco/pipelines/unstacked/unstacked_dfs_xgb_classifier.json
rename to draco/pipelines/preprocessing/entity_dataframe.json
index e26fa00..0bd238a 100644
--- a/draco/pipelines/unstacked/unstacked_dfs_xgb_classifier.json
+++ b/draco/pipelines/preprocessing/entity_dataframe.json
@@ -2,10 +2,7 @@
     "primitives": [
         "featuretools.EntitySet.entity_from_dataframe",
         "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
+        "featuretools.EntitySet.add_relationship"
     ],
     "init_params": {
         "featuretools.EntitySet.entity_from_dataframe#1": {
@@ -24,25 +21,6 @@
             "parent_column": "turbine_id",
             "child": "readings",
             "child_column": "turbine_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
         }
     }
 }
diff --git a/draco/pipelines/preprocessing/entity_normalization.json b/draco/pipelines/preprocessing/entity_normalization.json
new file mode 100644
index 0000000..9f3f3ab
--- /dev/null
+++ b/draco/pipelines/preprocessing/entity_normalization.json
@@ -0,0 +1,20 @@
+{
+    "primitives": [
+        "featuretools.EntitySet.entity_from_dataframe",
+        "featuretools.EntitySet.normalize_entity"
+    ],
+    "init_params": {
+        "featuretools.EntitySet.entity_from_dataframe#1": {
+            "entity_id": "readings",
+            "index": "reading_id",
+            "make_index": true,
+            "time_index": "timestamp"
+        },
+        "featuretools.EntitySet.normalize_entity#1": {
+            "base_entity_id": "readings",
+            "new_entity_id": "turbines",
+            "index": "turbine_id",
+            "make_time_index": false
+        }
+    }
+}
diff --git a/draco/pipelines/preprocessing/unstack.json b/draco/pipelines/preprocessing/unstack.json
new file mode 100644
index 0000000..1acd833
--- /dev/null
+++ b/draco/pipelines/preprocessing/unstack.json
@@ -0,0 +1,43 @@
+{
+    "primitives": [
+        "pandas.DataFrame.resample",
+        "pandas.DataFrame.unstack"
+    ],
+    "init_params": {
+        "pandas.DataFrame.resample#1": {
+            "rule": "600s",
+            "on": "timestamp",
+            "groupby": [
+                "turbine_id",
+                "signal_id"
+            ],
+            "aggregation": "mean",
+            "reset_index": false
+        },
+        "pandas.DataFrame.unstack#1": {
+            "level": "signal_id",
+            "reset_index": true
+        }
+    },
+    "input_names": {
+        "pandas.DataFrame.unstack#1": {
+            "X": "readings"
+        }
+    },
+    "output_names": {
+        "pandas.DataFrame.resample#1": {
+            "X": "readings"
+        },
+        "pandas.DataFrame.unstack#1": {
+            "X": "readings"
+        }
+    },
+    "outputs": {
+        "default": [
+            {
+                "name": "readings",
+                "variable": "pandas.DataFrame.unstack#1.readings"
+            }
+        ]
+    }
+}
diff --git a/draco/pipelines/probability/normalize_dfs_xgb_classifier.json b/draco/pipelines/probability/normalize_dfs_xgb_classifier.json
deleted file mode 100644
index 495a5d9..0000000
--- a/draco/pipelines/probability/normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier:probabilities",
-        "numpy.take"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.EntitySet.normalize_entity#2": {
-            "base_entity_id": "readings",
-            "new_entity_id": "signals",
-            "index": "signal_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": false,
-            "n_jobs": 1,
-            "training_window": "1d"
-        },
-        "numpy.take#1": {
-            "indices": 1,
-            "axis": 1
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/probability/unstack_dfs_xgb_classifier.json b/draco/pipelines/probability/unstack_dfs_xgb_classifier.json
deleted file mode 100644
index aedbada..0000000
--- a/draco/pipelines/probability/unstack_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.add_relationship",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier:probabilities",
-        "numpy.take"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "entity_id": "turbines",
-            "index": "turbine_id",
-            "make_index": false
-        },
-        "featuretools.EntitySet.add_relationship#1": {
-            "parent": "turbines",
-            "parent_column": "turbine_id",
-            "child": "readings",
-            "child_column": "turbine_id"
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "1d"
-        },
-        "numpy.take#1": {
-            "indices": 1,
-            "axis": 1
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#2": {
-            "dataframe": "turbines"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/probability/unstack_normalize_dfs_xgb_classifier.json b/draco/pipelines/probability/unstack_normalize_dfs_xgb_classifier.json
deleted file mode 100644
index eddddd8..0000000
--- a/draco/pipelines/probability/unstack_normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-    "primitives": [
-        "pandas.DataFrame.resample",
-        "pandas.DataFrame.unstack",
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier:probabilities",
-        "numpy.take"
-    ],
-    "init_params": {
-        "pandas.DataFrame.resample#1": {
-            "rule": "600s",
-            "on": "timestamp",
-            "groupby": [
-                "turbine_id",
-                "signal_id"
-            ],
-            "aggregation": "mean",
-            "reset_index": false
-        },
-        "pandas.DataFrame.unstack#1": {
-            "level": "signal_id",
-            "reset_index": true
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": false,
-            "n_jobs": 1,
-            "training_window": "1d"
-        },
-        "numpy.take#1": {
-            "indices": 1,
-            "axis": 1
-        }
-    },
-    "input_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        },
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    },
-    "output_names": {
-        "pandas.DataFrame.resample#1": {
-            "X": "readings"
-        },
-        "pandas.DataFrame.unstack#1": {
-            "X": "readings"
-        }
-    }
-}
diff --git a/draco/pipelines/unstacked/unstacked_normalize_dfs_xgb_classifier.json b/draco/pipelines/unstacked/unstacked_normalize_dfs_xgb_classifier.json
deleted file mode 100644
index dafefd3..0000000
--- a/draco/pipelines/unstacked/unstacked_normalize_dfs_xgb_classifier.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-    "primitives": [
-        "featuretools.EntitySet.entity_from_dataframe",
-        "featuretools.EntitySet.normalize_entity",
-        "featuretools.dfs",
-        "mlprimitives.custom.feature_extraction.CategoricalEncoder",
-        "xgboost.XGBClassifier"
-    ],
-    "init_params": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "entity_id": "readings",
-            "index": "reading_id",
-            "make_index": true,
-            "time_index": "timestamp"
-        },
-        "featuretools.EntitySet.normalize_entity#1": {
-            "base_entity_id": "readings",
-            "new_entity_id": "turbines",
-            "index": "turbine_id",
-            "make_time_index": false
-        },
-        "featuretools.dfs#1": {
-            "target_entity": "turbines",
-            "index": "turbine_id",
-            "time_index": "cutoff_time",
-            "encode": false,
-            "max_depth": -1,
-            "copy": true,
-            "verbose": true,
-            "n_jobs": 1,
-            "training_window": "3d"
-        }
-    },
-    "input_names": {
-        "featuretools.EntitySet.entity_from_dataframe#1": {
-            "dataframe": "readings"
-        }
-    }
-}
diff --git a/draco/primitives/mlblocks.MLPipeline.json b/draco/primitives/mlblocks.MLPipeline.json
new file mode 100644
index 0000000..aee1da2
--- /dev/null
+++ b/draco/primitives/mlblocks.MLPipeline.json
@@ -0,0 +1,37 @@
+{
+    "name": "mlblocks.MLPipeline",
+    "primitive": "mlblocks.MLPipeline",
+    "fit": {
+        "method": "fit",
+        "args": "get_fit_args"
+    },
+    "produce": {
+        "method": "predict",
+        "args": "get_predict_args",
+        "output": "get_outputs"
+    },
+    "hyperparameters": {
+        "fixed": {
+            "pipeline": {
+                "type": "str",
+                "default": null
+            },
+            "primitives": {
+                "type": "list",
+                "default": []
+            },
+            "init_params": {
+                "type": "dict",
+                "default": {}
+            },
+            "input_names": {
+                "type": "dict",
+                "default": {}
+            },
+            "output_names": {
+                "type": "dict",
+                "default": {}
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tutorials/01_Draco_Machine_Learning.ipynb b/tutorials/01_Draco_Machine_Learning.ipynb
index 4a5fde7..6b1089e 100644
--- a/tutorials/01_Draco_Machine_Learning.ipynb
+++ b/tutorials/01_Draco_Machine_Learning.ipynb
@@ -414,28 +414,22 @@
     {
      "data": {
       "text/plain": [
-       "['unstacked.unstacked_normalize_dfs_xgb_classifier',\n",
-       " 'unstacked.unstacked_double_lstm_timeseries_classifier',\n",
-       " 'unstacked.unstacked_lstm_timeseries_classifier',\n",
-       " 'unstacked.unstacked_dfs_xgb_classifier',\n",
-       " 'classes.unstack_dfs_xgb_classifier',\n",
-       " 'classes.unstack_double_lstm_timeseries_classifier',\n",
-       " 'classes.normalize_dfs_xgb_classifier',\n",
-       " 'classes.unstack_lstm_timeseries_classifier',\n",
-       " 'classes.unstack_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_unstack_lstm_timeseries_classifier',\n",
-       " 'disabled.resample_unstack_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_unstack_double_lstm_timeseries_classifier',\n",
-       " 'disabled.resample_dfs_xgb_classifier',\n",
-       " 'disabled.resample_unstack_dfs_xgb_classifier',\n",
-       " 'disabled.dfs_xgb_classifier',\n",
-       " 'probability.unstack_dfs_xgb_classifier',\n",
-       " 'probability.unstack_double_lstm_timeseries_classifier',\n",
-       " 'probability.normalize_dfs_xgb_classifier',\n",
-       " 'probability.unstack_lstm_timeseries_classifier',\n",
-       " 'probability.unstack_normalize_dfs_xgb_classifier']"
+       "['dfs_xgb_prob_with_unstack',\n",
+       " 'dfs_xgb_with_normalization',\n",
+       " 'dfs_xgb',\n",
+       " 'dfs_xgb_with_unstack',\n",
+       " 'dfs_xgb_prob_with_unstack_normalization',\n",
+       " 'dfs_xgb_with_unstack_normalization',\n",
+       " 'dfs_xgb_prob_with_double_normalization',\n",
+       " 'dfs_xgb_with_double_normalization',\n",
+       " 'double_lstm_prob_with_unstack',\n",
+       " 'double_lstm_prob',\n",
+       " 'double_lstm',\n",
+       " 'double_lstm_with_unstack',\n",
+       " 'lstm_prob_with_unstack',\n",
+       " 'lstm_with_unstack',\n",
+       " 'lstm_prob',\n",
+       " 'lstm']"
       ]
      },
      "execution_count": 10,
@@ -464,20 +458,14 @@
     {
      "data": {
       "text/plain": [
-       "['unstacked.unstacked_normalize_dfs_xgb_classifier',\n",
-       " 'unstacked.unstacked_dfs_xgb_classifier',\n",
-       " 'classes.unstack_dfs_xgb_classifier',\n",
-       " 'classes.normalize_dfs_xgb_classifier',\n",
-       " 'classes.unstack_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_unstack_normalize_dfs_xgb_classifier',\n",
-       " 'disabled.normalize_dfs_xgb_classifier',\n",
-       " 'disabled.resample_dfs_xgb_classifier',\n",
-       " 'disabled.resample_unstack_dfs_xgb_classifier',\n",
-       " 'disabled.dfs_xgb_classifier',\n",
-       " 'probability.unstack_dfs_xgb_classifier',\n",
-       " 'probability.normalize_dfs_xgb_classifier',\n",
-       " 'probability.unstack_normalize_dfs_xgb_classifier']"
+       "['dfs_xgb_prob_with_unstack',\n",
+       " 'dfs_xgb_with_normalization',\n",
+       " 'dfs_xgb',\n",
+       " 'dfs_xgb_with_unstack',\n",
+       " 'dfs_xgb_prob_with_unstack_normalization',\n",
+       " 'dfs_xgb_with_unstack_normalization',\n",
+       " 'dfs_xgb_prob_with_double_normalization',\n",
+       " 'dfs_xgb_with_double_normalization']"
       ]
      },
      "execution_count": 11,
@@ -505,20 +493,14 @@
     {
      "data": {
       "text/plain": [
-       "{'unstacked.unstacked_normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/unstacked/unstacked_normalize_dfs_xgb_classifier.json',\n",
-       " 'unstacked.unstacked_dfs_xgb_classifier': '/Draco/draco/pipelines/unstacked/unstacked_dfs_xgb_classifier.json',\n",
-       " 'classes.unstack_dfs_xgb_classifier': '/Draco/draco/pipelines/classes/unstack_dfs_xgb_classifier.json',\n",
-       " 'classes.normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/classes/normalize_dfs_xgb_classifier.json',\n",
-       " 'classes.unstack_normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/classes/unstack_normalize_dfs_xgb_classifier.json',\n",
-       " 'disabled.resample_normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/resample_normalize_dfs_xgb_classifier.json',\n",
-       " 'disabled.resample_unstack_normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/resample_unstack_normalize_dfs_xgb_classifier.json',\n",
-       " 'disabled.normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/normalize_dfs_xgb_classifier.json',\n",
-       " 'disabled.resample_dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/resample_dfs_xgb_classifier.json',\n",
-       " 'disabled.resample_unstack_dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/resample_unstack_dfs_xgb_classifier.json',\n",
-       " 'disabled.dfs_xgb_classifier': '/Draco/draco/pipelines/disabled/dfs_xgb_classifier.json',\n",
-       " 'probability.unstack_dfs_xgb_classifier': '/Draco/draco/pipelines/probability/unstack_dfs_xgb_classifier.json',\n",
-       " 'probability.normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/probability/normalize_dfs_xgb_classifier.json',\n",
-       " 'probability.unstack_normalize_dfs_xgb_classifier': '/Draco/draco/pipelines/probability/unstack_normalize_dfs_xgb_classifier.json'}"
+       "{'dfs_xgb_prob_with_unstack': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack.json',\n",
+       " 'dfs_xgb_with_normalization': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_with_normalization.json',\n",
+       " 'dfs_xgb': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb.json',\n",
+       " 'dfs_xgb_with_unstack': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack.json',\n",
+       " 'dfs_xgb_prob_with_unstack_normalization': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_unstack_normalization.json',\n",
+       " 'dfs_xgb_with_unstack_normalization': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_with_unstack_normalization.json',\n",
+       " 'dfs_xgb_prob_with_double_normalization': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_prob_with_double_normalization.json',\n",
+       " 'dfs_xgb_with_double_normalization': '/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/draco/pipelines/dfs_xgb/dfs_xgb_with_double_normalization.json'}"
       ]
      },
      "execution_count": 12,
@@ -557,8 +539,8 @@
    "outputs": [],
    "source": [
     "templates = [\n",
-    "    'classes.unstack_normalize_dfs_xgb_classifier', \n",
-    "    'classes.normalize_dfs_xgb_classifier'\n",
+    "    'dfs_xgb_with_unstack_normalization', \n",
+    "    'dfs_xgb_with_double_normalization'\n",
     "]"
    ]
   },
@@ -631,9 +613,9 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "INFO:btb.session:Obtaining default configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
+      "INFO:btb.session:Obtaining default configuration for dfs_xgb_with_unstack_normalization\n",
       "INFO:draco.pipeline:New configuration found:\n",
-      "  Template: classes.unstack_normalize_dfs_xgb_classifier \n",
+      "  Template: dfs_xgb_with_unstack_normalization \n",
       "    Hyperparameters: \n",
       "      ('mlprimitives.custom.feature_extraction.CategoricalEncoder#1', 'max_labels'): 0\n",
       "      ('xgboost.XGBClassifier#1', 'n_estimators'): 100\n",
@@ -641,26 +623,46 @@
       "      ('xgboost.XGBClassifier#1', 'learning_rate'): 0.1\n",
       "      ('xgboost.XGBClassifier#1', 'gamma'): 0.0\n",
       "      ('xgboost.XGBClassifier#1', 'min_child_weight'): 1\n",
-      "INFO:btb.session:New optimal found: classes.unstack_normalize_dfs_xgb_classifier - 0.611234532127027\n",
-      "INFO:btb.session:Obtaining default configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n"
+      "INFO:btb.session:New optimal found: dfs_xgb_with_unstack_normalization - 0.6117760013143775\n",
+      "INFO:btb.session:Obtaining default configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
+      "INFO:draco.pipeline:New configuration found:\n",
+      "  Template: dfs_xgb_with_unstack_normalization \n",
+      "    Hyperparameters: \n",
+      "      ('mlprimitives.custom.feature_extraction.CategoricalEncoder#1', 'max_labels'): 90\n",
+      "      ('xgboost.XGBClassifier#1', 'n_estimators'): 342\n",
+      "      ('xgboost.XGBClassifier#1', 'max_depth'): 6\n",
+      "      ('xgboost.XGBClassifier#1', 'learning_rate'): 0.9043352048331922\n",
+      "      ('xgboost.XGBClassifier#1', 'gamma'): 0.5258350872963311\n",
+      "      ('xgboost.XGBClassifier#1', 'min_child_weight'): 9\n",
+      "INFO:btb.session:New optimal found: dfs_xgb_with_unstack_normalization - 0.6205571445297473\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:draco.pipeline:New configuration found:\n",
+      "  Template: dfs_xgb_with_double_normalization \n",
+      "    Hyperparameters: \n",
+      "      ('mlprimitives.custom.feature_extraction.CategoricalEncoder#1', 'max_labels'): 80\n",
+      "      ('xgboost.XGBClassifier#1', 'n_estimators'): 66\n",
+      "      ('xgboost.XGBClassifier#1', 'max_depth'): 10\n",
+      "      ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6434375682152088\n",
+      "      ('xgboost.XGBClassifier#1', 'gamma'): 0.14135407511034503\n",
+      "      ('xgboost.XGBClassifier#1', 'min_child_weight'): 10\n",
+      "INFO:btb.session:New optimal found: dfs_xgb_with_double_normalization - 0.629513025867624\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n"
      ]
     },
     {
      "data": {
       "text/plain": [
-       "{'id': 'afc8e912142bc6c384231600df9874fc',\n",
-       " 'name': 'classes.unstack_normalize_dfs_xgb_classifier',\n",
+       "{'id': '452a22a136f67c575aee3341c9dc2395',\n",
+       " 'name': 'dfs_xgb_with_double_normalization',\n",
        " 'config': {('mlprimitives.custom.feature_extraction.CategoricalEncoder#1',\n",
-       "   'max_labels'): 0,\n",
-       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 100,\n",
-       "  ('xgboost.XGBClassifier#1', 'max_depth'): 3,\n",
-       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.1,\n",
-       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.0,\n",
-       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 1},\n",
-       " 'score': 0.611234532127027}"
+       "   'max_labels'): 80,\n",
+       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 66,\n",
+       "  ('xgboost.XGBClassifier#1', 'max_depth'): 10,\n",
+       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6434375682152088,\n",
+       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.14135407511034503,\n",
+       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 10},\n",
+       " 'score': 0.629513025867624}"
       ]
      },
      "execution_count": 16,
@@ -688,16 +690,16 @@
     {
      "data": {
       "text/plain": [
-       "{'id': 'afc8e912142bc6c384231600df9874fc',\n",
-       " 'name': 'classes.unstack_normalize_dfs_xgb_classifier',\n",
+       "{'id': '452a22a136f67c575aee3341c9dc2395',\n",
+       " 'name': 'dfs_xgb_with_double_normalization',\n",
        " 'config': {('mlprimitives.custom.feature_extraction.CategoricalEncoder#1',\n",
-       "   'max_labels'): 0,\n",
-       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 100,\n",
-       "  ('xgboost.XGBClassifier#1', 'max_depth'): 3,\n",
-       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.1,\n",
-       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.0,\n",
-       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 1},\n",
-       " 'score': 0.611234532127027}"
+       "   'max_labels'): 80,\n",
+       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 66,\n",
+       "  ('xgboost.XGBClassifier#1', 'max_depth'): 10,\n",
+       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6434375682152088,\n",
+       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.14135407511034503,\n",
+       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 10},\n",
+       " 'score': 0.629513025867624}"
       ]
      },
      "execution_count": 17,
@@ -725,12 +727,12 @@
      "data": {
       "text/plain": [
        "{('mlprimitives.custom.feature_extraction.CategoricalEncoder#1',\n",
-       "  'max_labels'): 0,\n",
-       " ('xgboost.XGBClassifier#1', 'n_estimators'): 100,\n",
-       " ('xgboost.XGBClassifier#1', 'max_depth'): 3,\n",
-       " ('xgboost.XGBClassifier#1', 'learning_rate'): 0.1,\n",
-       " ('xgboost.XGBClassifier#1', 'gamma'): 0.0,\n",
-       " ('xgboost.XGBClassifier#1', 'min_child_weight'): 1}"
+       "  'max_labels'): 80,\n",
+       " ('xgboost.XGBClassifier#1', 'n_estimators'): 66,\n",
+       " ('xgboost.XGBClassifier#1', 'max_depth'): 10,\n",
+       " ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6434375682152088,\n",
+       " ('xgboost.XGBClassifier#1', 'gamma'): 0.14135407511034503,\n",
+       " ('xgboost.XGBClassifier#1', 'min_child_weight'): 10}"
       ]
      },
      "execution_count": 18,
@@ -757,7 +759,7 @@
     {
      "data": {
       "text/plain": [
-       "'classes.unstack_normalize_dfs_xgb_classifier'"
+       "'dfs_xgb_with_double_normalization'"
       ]
      },
      "execution_count": 19,
@@ -785,7 +787,7 @@
     {
      "data": {
       "text/plain": [
-       "0.611234532127027"
+       "0.629513025867624"
       ]
      },
      "execution_count": 20,
@@ -815,41 +817,41 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n",
       "INFO:draco.pipeline:New configuration found:\n",
-      "  Template: classes.unstack_normalize_dfs_xgb_classifier \n",
+      "  Template: dfs_xgb_with_unstack_normalization \n",
       "    Hyperparameters: \n",
-      "      ('mlprimitives.custom.feature_extraction.CategoricalEncoder#1', 'max_labels'): 97\n",
-      "      ('xgboost.XGBClassifier#1', 'n_estimators'): 364\n",
-      "      ('xgboost.XGBClassifier#1', 'max_depth'): 7\n",
-      "      ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6635800510691365\n",
-      "      ('xgboost.XGBClassifier#1', 'gamma'): 0.9852977392614163\n",
-      "      ('xgboost.XGBClassifier#1', 'min_child_weight'): 2\n",
-      "INFO:btb.session:New optimal found: classes.unstack_normalize_dfs_xgb_classifier - 0.6379648413546719\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.unstack_normalize_dfs_xgb_classifier\n",
-      "INFO:btb.session:Generating new proposal configuration for classes.normalize_dfs_xgb_classifier\n"
+      "      ('mlprimitives.custom.feature_extraction.CategoricalEncoder#1', 'max_labels'): 48\n",
+      "      ('xgboost.XGBClassifier#1', 'n_estimators'): 130\n",
+      "      ('xgboost.XGBClassifier#1', 'max_depth'): 8\n",
+      "      ('xgboost.XGBClassifier#1', 'learning_rate'): 0.7437898568465957\n",
+      "      ('xgboost.XGBClassifier#1', 'gamma'): 0.9963350624783064\n",
+      "      ('xgboost.XGBClassifier#1', 'min_child_weight'): 10\n",
+      "INFO:btb.session:New optimal found: dfs_xgb_with_unstack_normalization - 0.651642052400304\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_double_normalization\n",
+      "INFO:btb.session:Generating new proposal configuration for dfs_xgb_with_unstack_normalization\n"
      ]
     },
     {
      "data": {
       "text/plain": [
-       "{'id': '7e6de03286fd71179e2a2f7b3f089ffb',\n",
-       " 'name': 'classes.unstack_normalize_dfs_xgb_classifier',\n",
+       "{'id': '22ec731234212508b7b4413ccce34294',\n",
+       " 'name': 'dfs_xgb_with_unstack_normalization',\n",
        " 'config': {('mlprimitives.custom.feature_extraction.CategoricalEncoder#1',\n",
-       "   'max_labels'): 97,\n",
-       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 364,\n",
-       "  ('xgboost.XGBClassifier#1', 'max_depth'): 7,\n",
-       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6635800510691365,\n",
-       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.9852977392614163,\n",
-       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 2},\n",
-       " 'score': 0.6379648413546719}"
+       "   'max_labels'): 48,\n",
+       "  ('xgboost.XGBClassifier#1', 'n_estimators'): 130,\n",
+       "  ('xgboost.XGBClassifier#1', 'max_depth'): 8,\n",
+       "  ('xgboost.XGBClassifier#1', 'learning_rate'): 0.7437898568465957,\n",
+       "  ('xgboost.XGBClassifier#1', 'gamma'): 0.9963350624783064,\n",
+       "  ('xgboost.XGBClassifier#1', 'min_child_weight'): 10},\n",
+       " 'score': 0.651642052400304}"
       ]
      },
      "execution_count": 21,
@@ -869,7 +871,7 @@
     {
      "data": {
       "text/plain": [
-       "0.6379648413546719"
+       "0.651642052400304"
       ]
      },
      "execution_count": 22,
@@ -890,12 +892,12 @@
      "data": {
       "text/plain": [
        "{('mlprimitives.custom.feature_extraction.CategoricalEncoder#1',\n",
-       "  'max_labels'): 97,\n",
-       " ('xgboost.XGBClassifier#1', 'n_estimators'): 364,\n",
-       " ('xgboost.XGBClassifier#1', 'max_depth'): 7,\n",
-       " ('xgboost.XGBClassifier#1', 'learning_rate'): 0.6635800510691365,\n",
-       " ('xgboost.XGBClassifier#1', 'gamma'): 0.9852977392614163,\n",
-       " ('xgboost.XGBClassifier#1', 'min_child_weight'): 2}"
+       "  'max_labels'): 48,\n",
+       " ('xgboost.XGBClassifier#1', 'n_estimators'): 130,\n",
+       " ('xgboost.XGBClassifier#1', 'max_depth'): 8,\n",
+       " ('xgboost.XGBClassifier#1', 'learning_rate'): 0.7437898568465957,\n",
+       " ('xgboost.XGBClassifier#1', 'gamma'): 0.9963350624783064,\n",
+       " ('xgboost.XGBClassifier#1', 'min_child_weight'): 10}"
       ]
      },
      "execution_count": 23,
@@ -962,7 +964,7 @@
     {
      "data": {
       "text/plain": [
-       "0.7346938775510203"
+       "0.608695652173913"
       ]
      },
      "execution_count": 26,
@@ -1051,7 +1053,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -1065,7 +1067,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.9"
+   "version": "3.7.11"
   }
  },
  "nbformat": 4,
diff --git a/tutorials/03_Benchmarking.ipynb b/tutorials/03_Benchmarking.ipynb
index c7bce62..12c5e47 100644
--- a/tutorials/03_Benchmarking.ipynb
+++ b/tutorials/03_Benchmarking.ipynb
@@ -76,12 +76,12 @@
    "outputs": [],
    "source": [
     "templates = [\n",
-    "    'probability.unstack_lstm_timeseries_classifier',\n",
-    "    'probability.normalize_dfs_xgb_classifier'\n",
+    "    'lstm_prob_with_unstack',\n",
+    "    'dfs_xgb_prob_with_double_normalization'\n",
     "]\n",
     "window_size_rule = [('1d', '1h'), ('2d', '2h')]\n",
     "init_params = {\n",
-    "    'unstack_lstm_timeseries_classifier': {\n",
+    "    'lstm_prob_with_unstack': {\n",
     "        'keras.Sequential.LSTMTimeSeriesClassifier#1': {\n",
     "            'epochs': 1,\n",
     "        }\n",
@@ -389,7 +389,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -403,7 +403,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.12"
+   "version": "3.7.11"
   }
  },
  "nbformat": 4,
diff --git a/tutorials/04_Draco_Regression_Pipeline.ipynb b/tutorials/04_Draco_Regression_Pipeline.ipynb
new file mode 100644
index 0000000..709c839
--- /dev/null
+++ b/tutorials/04_Draco_Regression_Pipeline.ipynb
@@ -0,0 +1,793 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Draco Regression Pipeline"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this tutorial we will show you how to use Draco Regression pipelines to solve a Machine Learning problem\n",
+    "defined via a Target Times table.\n",
+    "\n",
+    "During the next steps we will:\n",
+    "\n",
+    "- Load demo Remaining Useful Life (dataset) with training and testing target times and readings\n",
+    "- Find available pipelines and load one of them\n",
+    "- Build and fit a Machine Learning pipeline\n",
+    "- Make predictions using the fitted pipeline\n",
+    "- Evaluate how good the predictions are"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 0. Setup the logging\n",
+    "\n",
+    "This step sets up logging in our environment to increase our visibility over\n",
+    "the steps that Draco performs."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import logging;\n",
+    "\n",
+    "logging.basicConfig(level=logging.INFO)\n",
+    "logging.getLogger().setLevel(level=logging.INFO)\n",
+    "\n",
+    "import warnings\n",
+    "warnings.simplefilter(\"ignore\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1. Load the Data\n",
+    "\n",
+    "The first step is to load the data that we are going to use.\n",
+    "\n",
+    "In order to use the demo data included in Draco, the `draco.demo.load_demo` function can be used."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.demo import load_demo\n",
+    "\n",
+    "train_target_times, test_target_times, readings = load_demo(name='rul')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This will download some demo data from [Draco S3 demo Bucket](\n",
+    "https://d3-ai-draco.s3.amazonaws.com/index.html) and load it as\n",
+    "the necessary `target_times` and `readings` tables.\n",
+    "\n",
+    "The exact format of these tables is described in the Draco README and docs:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:20:00</td>\n",
+       "      <td>166</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:30:00</td>\n",
+       "      <td>165</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:40:00</td>\n",
+       "      <td>164</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:50:00</td>\n",
+       "      <td>163</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 05:00:00</td>\n",
+       "      <td>162</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id         cutoff_time  target\n",
+       "0           1 2013-01-12 04:20:00     166\n",
+       "1           1 2013-01-12 04:30:00     165\n",
+       "2           1 2013-01-12 04:40:00     164\n",
+       "3           1 2013-01-12 04:50:00     163\n",
+       "4           1 2013-01-12 05:00:00     162"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train_target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(18131, 3)"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train_target_times.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "turbine_id              int64\n",
+       "cutoff_time    datetime64[ns]\n",
+       "target                  int64\n",
+       "dtype: object"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train_target_times.dtypes"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-13 13:10:00</td>\n",
+       "      <td>112.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2</td>\n",
+       "      <td>2013-01-14 08:00:00</td>\n",
+       "      <td>98.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>3</td>\n",
+       "      <td>2013-01-14 02:50:00</td>\n",
+       "      <td>69.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>4</td>\n",
+       "      <td>2013-01-14 01:10:00</td>\n",
+       "      <td>82.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>5</td>\n",
+       "      <td>2013-01-14 13:10:00</td>\n",
+       "      <td>91.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id         cutoff_time  target\n",
+       "0           1 2013-01-13 13:10:00   112.0\n",
+       "1           2 2013-01-14 08:00:00    98.0\n",
+       "2           3 2013-01-14 02:50:00    69.0\n",
+       "3           4 2013-01-14 01:10:00    82.0\n",
+       "4           5 2013-01-14 13:10:00    91.0"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(100, 3)"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_target_times.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "turbine_id              int64\n",
+       "cutoff_time    datetime64[ns]\n",
+       "target                float64\n",
+       "dtype: object"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_target_times.dtypes"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>signal_id</th>\n",
+       "      <th>value</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:10:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0007</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:20:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>0.0019</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:30:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0043</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:40:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>0.0007</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:50:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0019</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id           timestamp              signal_id   value\n",
+       "0           1 2013-01-12 00:10:00  operational setting 1 -0.0007\n",
+       "1           1 2013-01-12 00:20:00  operational setting 1  0.0019\n",
+       "2           1 2013-01-12 00:30:00  operational setting 1 -0.0043\n",
+       "3           1 2013-01-12 00:40:00  operational setting 1  0.0007\n",
+       "4           1 2013-01-12 00:50:00  operational setting 1 -0.0019"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(809448, 4)"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "turbine_id             int64\n",
+       "timestamp     datetime64[ns]\n",
+       "signal_id             object\n",
+       "value                float64\n",
+       "dtype: object"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.dtypes"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Load your own Dataset"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Alternatively, if you want to load your own dataset, all you have to do is load the\n",
+    "`target_times` and `readings` tables as `pandas.DataFrame` objects.\n",
+    "\n",
+    "Make sure to parse the corresponding datetime fields!\n",
+    "\n",
+    "```python\n",
+    "import pandas as pd\n",
+    "\n",
+    "target_times = pd.read_csv('path/to/your/target_times.csv', parse_dates=['cutoff_time'])\n",
+    "readings = pd.read_csv('path/to/your/readings.csv', parse_dates=['timestamp'])\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2. Finding the available Pipelines\n",
+    "\n",
+    "The next step will be to select a collection of templates from the ones\n",
+    "available in Draco.\n",
+    "\n",
+    "For this, we can use the `draco.get_pipelines` function, which will\n",
+    "return us the list of all the available MLBlocks pipelines found in the\n",
+    "Draco system."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['dfs_xgb_prob_with_unstack',\n",
+       " 'dfs_xgb_with_normalization',\n",
+       " 'dfs_xgb',\n",
+       " 'dfs_xgb_with_unstack',\n",
+       " 'dfs_xgb_prob_with_unstack_normalization',\n",
+       " 'dfs_xgb_with_unstack_normalization',\n",
+       " 'dfs_xgb_prob_with_double_normalization',\n",
+       " 'dfs_xgb_with_double_normalization',\n",
+       " 'lstm_regressor_with_unstack',\n",
+       " 'lstm_regressor',\n",
+       " 'double_lstm_prob_with_unstack',\n",
+       " 'double_lstm_prob',\n",
+       " 'double_lstm',\n",
+       " 'double_lstm_with_unstack',\n",
+       " 'lstm_prob_with_unstack',\n",
+       " 'lstm_with_unstack',\n",
+       " 'lstm_prob',\n",
+       " 'lstm']"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from draco import get_pipelines\n",
+    "\n",
+    "get_pipelines()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Optionally, we can pass a string to select the pipelines that contain it:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['lstm_regressor_with_unstack', 'lstm_regressor']"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "get_pipelines('regressor')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We will use the regression pipeline `lstm_regressor_with_unstack`\n",
+    "\n",
+    "The `lstm_regressor_with_unstack` pipeline contains the following steps:\n",
+    "\n",
+    "- Resample the data using a 10 minute average aggregation\n",
+    "- Unstack the data by signal, so each signal is in a different column\n",
+    "- Impute missing values in the readings table\n",
+    "- Normalize (scale) the data between [-1, 1].\n",
+    "- Create window sequences using target times.\n",
+    "- Apply an LSTM Regressor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pipeline_name = 'lstm_regressor_with_unstack'"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 3. Fitting a Draco Pipeline\n",
+    "\n",
+    "Once we have loaded the data, we create a **DracoPipeline** instance by passing `pipeline_name` which is the name of a pipeline, the path to a template json file, or a list that can combine both of them."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.pipeline import DracoPipeline\n",
+    "\n",
+    "pipeline = DracoPipeline(pipeline_name)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To train a pipeline we use the `fit` method passing the `target_times` and the `readings` table:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2022-02-01 15:05:13.365367: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
+      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+      "2022-02-01 15:05:13.379993: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fe6a0ec50a0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
+      "2022-02-01 15:05:13.380010: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version\n"
+     ]
+    }
+   ],
+   "source": [
+    "pipeline.fit(train_target_times, readings)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 4. Use the fitted pipeline\n",
+    "\n",
+    "After fitting the pipeline, we are ready to make predictions on new data:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "predictions = pipeline.predict(test_target_times, readings)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "And evaluate its prediction performance:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0.6362969806460871"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from sklearn.metrics import r2_score\n",
+    "\n",
+    "r2_score(test_target_times['target'], predictions)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 5. Save and load the pipeline\n",
+    "\n",
+    "Since the tuning and fitting process takes time to execute and requires a lot of data, you\n",
+    "will probably want to save a fitted instance and load it later to analyze new signals\n",
+    "instead of fitting pipelines over and over again.\n",
+    "\n",
+    "This can be done by using the `save` and `load` methods from the `DracoPipeline`.\n",
+    "\n",
+    "In order to save an instance, call its `save` method passing it the path and filename\n",
+    "where the model should be saved."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "path = 'my_pipeline.pkl'\n",
+    "\n",
+    "pipeline.save(path)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Once the pipeline is saved, it can be loaded back as a new `DracoPipeline` by using the\n",
+    "`DracoPipeline.load` method:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "new_pipeline = DracoPipeline.load(path)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Once loaded, it can be directly used to make predictions on new data."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[129.89064 ],\n",
+       "       [139.89001 ],\n",
+       "       [ 39.425865],\n",
+       "       [110.67838 ],\n",
+       "       [ 98.52903 ]], dtype=float32)"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "predictions = new_pipeline.predict(test_target_times, readings)\n",
+    "predictions[0:5]"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/tutorials/Convert NASA CMAPSS to Draco Format.ipynb b/tutorials/Convert NASA CMAPSS to Draco Format.ipynb
new file mode 100644
index 0000000..bf5af31
--- /dev/null
+++ b/tutorials/Convert NASA CMAPSS to Draco Format.ipynb
@@ -0,0 +1,406 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "2f3d8acf",
+   "metadata": {},
+   "source": [
+    "# Convert CMAPSS to Draco Format\n",
+    "\n",
+    "In this notebook we download [CMAPSS](https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#turbofan) data and reformat it as Draco pipelines expect."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "f39b805c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import datetime\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "626a2da0",
+   "metadata": {},
+   "source": [
+    "## 1. Download Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "ff641cff",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import io\n",
+    "import os\n",
+    "import urllib\n",
+    "import zipfile\n",
+    "\n",
+    "DATA_URL = 'https://d3-ai-greenguard.s3.amazonaws.com/CMAPSSData.zip'\n",
+    "\n",
+    "response = urllib.request.urlopen(DATA_URL)\n",
+    "bytes_io = io.BytesIO(response.read())\n",
+    "\n",
+    "with zipfile.ZipFile(bytes_io) as zf:\n",
+    "    zf.extractall('CMAPSSData')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9c435699",
+   "metadata": {},
+   "source": [
+    "## 2. Read Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "1bb002ac",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# columns\n",
+    "\n",
+    "index = ['unit number', 'time, in cycles']\n",
+    "setting = ['operational setting {}'.format(i + 1) for i in range(0, 3)]\n",
+    "sensor = ['sensor measurement {}'.format(i + 1) for i in range(0, 21)]\n",
+    "\n",
+    "all_columns = index + setting + sensor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "74478b0f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "train = pd.read_csv('CMAPSSData/train_FD001.txt', sep=' ', header=None)\n",
+    "train = train.dropna(axis=1)\n",
+    "train.columns = all_columns\n",
+    "\n",
+    "test = pd.read_csv('CMAPSSData/test_FD001.txt', sep=' ', header=None)\n",
+    "test = test.dropna(axis=1)\n",
+    "test.columns = all_columns\n",
+    "\n",
+    "y_test = pd.read_csv('CMAPSSData/RUL_FD001.txt', sep=' ', header=None)\n",
+    "y_test = y_test.dropna(axis=1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dd480185",
+   "metadata": {},
+   "source": [
+    "## 3. Create columns\n",
+    "\n",
+    "### 3.a create `RUL` column\n",
+    "How do we create **Remaining Useful Life (RUL)** column for the training dataset? We can assume that the last entry in the training dataset is the maximum life expectancy for that unit. Then each cycle we have will decrease by that number."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "eb0270ba",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_max(x):\n",
+    "    return cycles_max[x]\n",
+    "\n",
+    "cycles_max = train.groupby(\"unit number\")[\"time, in cycles\"].max().to_dict()\n",
+    "cycles_max = train['unit number'].apply(get_max)\n",
+    "\n",
+    "train['RUL'] = cycles_max - train[\"time, in cycles\"]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "57fbd3b9",
+   "metadata": {},
+   "source": [
+    "### 3.b create `cutoff_time` column\n",
+    "`cutoff_time` is a datetime column with relation to the `cycle` number. We pick a start date and start incrementing from there."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "3e320356",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_timestamp(x):\n",
+    "    return start + datetime.timedelta(minutes=x * 10)\n",
+    "\n",
+    "start = datetime.datetime(2013, 1, 12)\n",
+    "train['timestamp'] = train['time, in cycles'].apply(get_timestamp)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "11f78b71",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_timestamp_test(x):\n",
+    "    return last[x['unit number']] + datetime.timedelta(minutes=x['time, in cycles'] * 10)\n",
+    "\n",
+    "last = train.groupby('unit number').last()['timestamp'].to_dict()\n",
+    "test['timestamp'] = test.apply(get_timestamp_test, axis=1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "95bec88f",
+   "metadata": {},
+   "source": [
+    "### 4. Format Data\n",
+    "\n",
+    "make `label_times` have three columns, namely: `['turbine_id', 'cutoff_time', 'target']`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "1ce4320e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>25</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:20:00</td>\n",
+       "      <td>166</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>26</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:30:00</td>\n",
+       "      <td>165</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>27</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:40:00</td>\n",
+       "      <td>164</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:50:00</td>\n",
+       "      <td>163</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>29</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 05:00:00</td>\n",
+       "      <td>162</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    turbine_id         cutoff_time  target\n",
+       "25           1 2013-01-12 04:20:00     166\n",
+       "26           1 2013-01-12 04:30:00     165\n",
+       "27           1 2013-01-12 04:40:00     164\n",
+       "28           1 2013-01-12 04:50:00     163\n",
+       "29           1 2013-01-12 05:00:00     162"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train_label_times = train[['unit number', 'timestamp', 'RUL']].copy()\n",
+    "train_label_times.columns = ['turbine_id', 'cutoff_time', 'target']\n",
+    "\n",
+    "# drop first 24 occurances\n",
+    "train_label_times = train_label_times[train_label_times.groupby('turbine_id').cumcount('turbine_id') > 24]\n",
+    "train_label_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "f320e753",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-13 13:10:00</td>\n",
+       "      <td>112.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2</td>\n",
+       "      <td>2013-01-14 08:00:00</td>\n",
+       "      <td>98.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>3</td>\n",
+       "      <td>2013-01-14 02:50:00</td>\n",
+       "      <td>69.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>4</td>\n",
+       "      <td>2013-01-14 01:10:00</td>\n",
+       "      <td>82.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>5</td>\n",
+       "      <td>2013-01-14 13:10:00</td>\n",
+       "      <td>91.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id         cutoff_time  target\n",
+       "0           1 2013-01-13 13:10:00   112.0\n",
+       "1           2 2013-01-14 08:00:00    98.0\n",
+       "2           3 2013-01-14 02:50:00    69.0\n",
+       "3           4 2013-01-14 01:10:00    82.0\n",
+       "4           5 2013-01-14 13:10:00    91.0"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_label_times = test[['unit number', 'timestamp']].groupby('unit number').last().reset_index()\n",
+    "test_label_times.columns = ['turbine_id', 'cutoff_time']\n",
+    "test_label_times['target'] = np.array(y_test).astype('float32')\n",
+    "test_label_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "50be8dc4",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "reading_columns = ['unit number', 'timestamp'] + setting + sensor\n",
+    "readings = pd.concat([train, test])[reading_columns]\n",
+    "readings = readings.melt(id_vars=['unit number', 'timestamp'])\n",
+    "readings.columns = ['turbine_id', 'timestamp', 'signal_id', 'value']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "01a77e60",
+   "metadata": {},
+   "source": [
+    "## 5. Save Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "5f622ff7",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "readings.to_csv('rul_readings.csv.gz', compression='gzip', index=False)\n",
+    "train_label_times.to_csv('rul_train_target_times.csv.gz', compression='gzip', index=False)\n",
+    "test_label_times.to_csv('rul_test_target_times.csv.gz', compression='gzip', index=False)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/pipelines/normalize_dfs_xgb_classifier.ipynb b/tutorials/pipelines/dfs_xgb_with_double_normalization.ipynb
similarity index 58%
rename from tutorials/pipelines/normalize_dfs_xgb_classifier.ipynb
rename to tutorials/pipelines/dfs_xgb_with_double_normalization.ipynb
index ca00d58..6fd5f1e 100644
--- a/tutorials/pipelines/normalize_dfs_xgb_classifier.ipynb
+++ b/tutorials/pipelines/dfs_xgb_with_double_normalization.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# normalize_dfs_xgb_classifier"
+    "# dfs_xgb_with_double_normalization"
    ]
   },
   {
@@ -24,14 +24,23 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "pipeline_name = 'classes.normalize_dfs_xgb_classifier'"
+    "pipeline_name = 'dfs_xgb_with_double_normalization'"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/dask/dataframe/utils.py:14: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
+      "  import pandas.util.testing as tm\n"
+     ]
+    }
+   ],
    "source": [
     "from draco.pipeline import DracoPipeline\n",
     "\n",
@@ -46,10 +55,7 @@
     {
      "data": {
       "text/plain": [
-       "['pandas.DataFrame.resample',\n",
-       " 'featuretools.EntitySet.entity_from_dataframe',\n",
-       " 'featuretools.EntitySet.normalize_entity',\n",
-       " 'featuretools.EntitySet.normalize_entity',\n",
+       "['mlblocks.MLPipeline',\n",
        " 'featuretools.dfs',\n",
        " 'mlprimitives.custom.feature_extraction.CategoricalEncoder',\n",
        " 'xgboost.XGBClassifier']"
@@ -267,360 +273,28 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## pandas.DataFrame.resample\n",
+    "## mlblocks.MLPipeline\n",
+    "\n",
+    "### pandas.DataFrame.resample\n",
     "\n",
     "* Input: readings\n",
     "* Output: readings (resampled)\n",
     "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
-    "  signal_id and timestamp have been set as a multi-index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 0\n",
-    "context = pipeline.fit(target_times, readings, output_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 8,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>323.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:10:00</td>\n",
-       "      <td>346.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:20:00</td>\n",
-       "      <td>407.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:30:00</td>\n",
-       "      <td>257.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:40:00</td>\n",
-       "      <td>267.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id signal_id           timestamp  value\n",
-       "0       T001       S01 2013-01-10 00:00:00  323.0\n",
-       "1       T001       S01 2013-01-10 00:10:00  346.0\n",
-       "2       T001       S01 2013-01-10 00:20:00  407.0\n",
-       "3       T001       S01 2013-01-10 00:30:00  257.0\n",
-       "4       T001       S01 2013-01-10 00:40:00  267.0"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "##  featuretools.EntitySet.entity_from_dataframe\n",
+    "  signal_id and timestamp have been set as a multi-index\n",
+    "\n",
+    "###  featuretools.EntitySet.entity_from_dataframe\n",
     "\n",
     "* Input: readings (resampled)\n",
     "* Output: entityset\n",
-    "* Effect: Entityset has been generated from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 1\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y', 'entityset'])"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Entityset: entityset\n",
-       "  Entities:\n",
-       "    readings [Rows: 1329146, Columns: 5]\n",
-       "  Relationships:\n",
-       "    No relationships"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['entityset']"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>323.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:10:00</td>\n",
-       "      <td>346.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:20:00</td>\n",
-       "      <td>407.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:30:00</td>\n",
-       "      <td>257.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:40:00</td>\n",
-       "      <td>267.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id signal_id           timestamp  value\n",
-       "0       T001       S01 2013-01-10 00:00:00  323.0\n",
-       "1       T001       S01 2013-01-10 00:10:00  346.0\n",
-       "2       T001       S01 2013-01-10 00:20:00  407.0\n",
-       "3       T001       S01 2013-01-10 00:30:00  257.0\n",
-       "4       T001       S01 2013-01-10 00:40:00  267.0"
-      ]
-     },
-     "execution_count": 13,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## featuretools.EntitySet.normalize_entity\n",
+    "* Effect: Entityset has been generated from readings\n",
+    "\n",
+    "### featuretools.EntitySet.normalize_entity\n",
     "\n",
     "* Input: entityset\n",
     "* Output: entityset with relationship (readings.turbine_id with turbines.turbine_id)\n",
-    "* Effect: establish relation between readings and turbines"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 2\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Entityset: entityset\n",
-       "  Entities:\n",
-       "    readings [Rows: 1329146, Columns: 5]\n",
-       "    turbines [Rows: 1, Columns: 1]\n",
-       "  Relationships:\n",
-       "    readings.turbine_id -> turbines.turbine_id"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['entityset']"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## featuretools.EntitySet.normalize_entity\n",
+    "* Effect: establish relation between readings and turbines\n",
+    "\n",
+    "### featuretools.EntitySet.normalize_entity\n",
     "\n",
     "* Input: entityset\n",
     "* Output: entityset with relationship (readings.signal_id with signals.signal_id)\n",
@@ -629,26 +303,26 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 3\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
+    "step = 0\n",
+    "context = pipeline.fit(target_times, readings, output_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
+       "dict_keys(['readings', 'turbines', 'X', 'y', 'entityset'])"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -659,7 +333,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
@@ -675,7 +349,7 @@
        "    readings.signal_id -> signals.signal_id"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -697,17 +371,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 4\n",
+    "step = 1\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
@@ -716,7 +390,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -727,7 +401,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -751,27 +425,27 @@
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
-       "      <th>COUNT(readings)</th>\n",
+       "      <th>SUM(readings.value)</th>\n",
+       "      <th>STD(readings.value)</th>\n",
        "      <th>MAX(readings.value)</th>\n",
-       "      <th>MEAN(readings.value)</th>\n",
+       "      <th>SKEW(readings.value)</th>\n",
        "      <th>MIN(readings.value)</th>\n",
-       "      <th>MODE(readings.signal_id)</th>\n",
+       "      <th>MEAN(readings.value)</th>\n",
+       "      <th>COUNT(readings)</th>\n",
        "      <th>NUM_UNIQUE(readings.signal_id)</th>\n",
-       "      <th>SKEW(readings.value)</th>\n",
-       "      <th>STD(readings.value)</th>\n",
-       "      <th>SUM(readings.value)</th>\n",
-       "      <th>MODE(readings.DAY(timestamp))</th>\n",
+       "      <th>MODE(readings.signal_id)</th>\n",
+       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
        "      <th>...</th>\n",
-       "      <th>SKEW(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
-       "      <th>SKEW(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>MEAN(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
+       "      <th>MEAN(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.DAY(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.WEEKDAY(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.MONTH(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.DAY(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.WEEKDAY(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.MONTH(timestamp)))</th>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>turbine_id</th>\n",
@@ -801,123 +475,123 @@
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.433649e+09</td>\n",
+       "      <td>1.456860e+06</td>\n",
        "      <td>3448719.0</td>\n",
-       "      <td>917107.079193</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>26</td>\n",
        "      <td>1.019214</td>\n",
-       "      <td>1.456860e+06</td>\n",
-       "      <td>3.433649e+09</td>\n",
-       "      <td>11</td>\n",
-       "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0.0</td>\n",
        "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
+       "      <td>917107.079193</td>\n",
        "      <td>3744</td>\n",
+       "      <td>26</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2</td>\n",
+       "      <td>...</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>11</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>4</td>\n",
+       "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.441489e+09</td>\n",
+       "      <td>1.459865e+06</td>\n",
        "      <td>3453777.0</td>\n",
-       "      <td>919201.162179</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>26</td>\n",
        "      <td>1.018761</td>\n",
-       "      <td>1.459865e+06</td>\n",
-       "      <td>3.441489e+09</td>\n",
-       "      <td>12</td>\n",
-       "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
        "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>T001</th>\n",
+       "      <td>919201.162179</td>\n",
        "      <td>3744</td>\n",
-       "      <td>3463880.0</td>\n",
-       "      <td>922935.352244</td>\n",
-       "      <td>2.7</td>\n",
-       "      <td>S01</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.018192</td>\n",
-       "      <td>1.465277e+06</td>\n",
-       "      <td>3.455470e+09</td>\n",
-       "      <td>13</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2</td>\n",
        "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>12</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>5</td>\n",
+       "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
+       "      <td>3.455470e+09</td>\n",
+       "      <td>1.465277e+06</td>\n",
+       "      <td>3463880.0</td>\n",
+       "      <td>1.018192</td>\n",
+       "      <td>2.7</td>\n",
+       "      <td>922935.352244</td>\n",
        "      <td>3744</td>\n",
-       "      <td>3474703.0</td>\n",
-       "      <td>928248.092869</td>\n",
-       "      <td>-1.0</td>\n",
-       "      <td>S01</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.017666</td>\n",
-       "      <td>1.473337e+06</td>\n",
-       "      <td>3.475361e+09</td>\n",
-       "      <td>14</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2</td>\n",
        "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>13</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>6</td>\n",
+       "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
+       "      <td>3.475361e+09</td>\n",
+       "      <td>1.473337e+06</td>\n",
+       "      <td>3474703.0</td>\n",
+       "      <td>1.017666</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>928248.092869</td>\n",
        "      <td>3744</td>\n",
-       "      <td>3485019.0</td>\n",
-       "      <td>924186.531200</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>S01</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.032002</td>\n",
-       "      <td>1.477958e+06</td>\n",
-       "      <td>2.888083e+09</td>\n",
-       "      <td>15</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2</td>\n",
        "      <td>...</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>14</td>\n",
+       "      <td>2013</td>\n",
        "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>T001</th>\n",
+       "      <td>2.888083e+09</td>\n",
+       "      <td>1.477958e+06</td>\n",
+       "      <td>3485019.0</td>\n",
+       "      <td>1.032002</td>\n",
        "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
+       "      <td>924186.531200</td>\n",
        "      <td>3744</td>\n",
+       "      <td>26</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2</td>\n",
+       "      <td>...</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
@@ -925,130 +599,122 @@
        "</div>"
       ],
       "text/plain": [
-       "            COUNT(readings)  MAX(readings.value)  MEAN(readings.value)  \\\n",
-       "turbine_id                                                               \n",
-       "T001                   3744            3448719.0         917107.079193   \n",
-       "T001                   3744            3453777.0         919201.162179   \n",
-       "T001                   3744            3463880.0         922935.352244   \n",
-       "T001                   3744            3474703.0         928248.092869   \n",
-       "T001                   3744            3485019.0         924186.531200   \n",
-       "\n",
-       "            MIN(readings.value) MODE(readings.signal_id)  \\\n",
-       "turbine_id                                                 \n",
-       "T001                        0.0                      S01   \n",
-       "T001                        0.0                      S01   \n",
-       "T001                        2.7                      S01   \n",
-       "T001                       -1.0                      S01   \n",
-       "T001                        0.0                      S01   \n",
+       "            SUM(readings.value)  STD(readings.value)  MAX(readings.value)  \\\n",
+       "turbine_id                                                                  \n",
+       "T001               3.433649e+09         1.456860e+06            3448719.0   \n",
+       "T001               3.441489e+09         1.459865e+06            3453777.0   \n",
+       "T001               3.455470e+09         1.465277e+06            3463880.0   \n",
+       "T001               3.475361e+09         1.473337e+06            3474703.0   \n",
+       "T001               2.888083e+09         1.477958e+06            3485019.0   \n",
        "\n",
-       "            NUM_UNIQUE(readings.signal_id)  SKEW(readings.value)  \\\n",
-       "turbine_id                                                         \n",
-       "T001                                    26              1.019214   \n",
-       "T001                                    26              1.018761   \n",
-       "T001                                    26              1.018192   \n",
-       "T001                                    26              1.017666   \n",
-       "T001                                    26              1.032002   \n",
+       "            SKEW(readings.value)  MIN(readings.value)  MEAN(readings.value)  \\\n",
+       "turbine_id                                                                    \n",
+       "T001                    1.019214                  0.0         917107.079193   \n",
+       "T001                    1.018761                  0.0         919201.162179   \n",
+       "T001                    1.018192                  2.7         922935.352244   \n",
+       "T001                    1.017666                 -1.0         928248.092869   \n",
+       "T001                    1.032002                  0.0         924186.531200   \n",
        "\n",
-       "            STD(readings.value)  SUM(readings.value)  \\\n",
-       "turbine_id                                             \n",
-       "T001               1.456860e+06         3.433649e+09   \n",
-       "T001               1.459865e+06         3.441489e+09   \n",
-       "T001               1.465277e+06         3.455470e+09   \n",
-       "T001               1.473337e+06         3.475361e+09   \n",
-       "T001               1.477958e+06         2.888083e+09   \n",
+       "            COUNT(readings)  NUM_UNIQUE(readings.signal_id)  \\\n",
+       "turbine_id                                                    \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
        "\n",
-       "            MODE(readings.DAY(timestamp))  ...  \\\n",
-       "turbine_id                                 ...   \n",
-       "T001                                   11  ...   \n",
-       "T001                                   12  ...   \n",
-       "T001                                   13  ...   \n",
-       "T001                                   14  ...   \n",
-       "T001                                   15  ...   \n",
+       "           MODE(readings.signal_id)  NUM_UNIQUE(readings.DAY(timestamp))  ...  \\\n",
+       "turbine_id                                                                ...   \n",
+       "T001                            S01                                    2  ...   \n",
+       "T001                            S01                                    2  ...   \n",
+       "T001                            S01                                    2  ...   \n",
+       "T001                            S01                                    2  ...   \n",
+       "T001                            S01                                    2  ...   \n",
        "\n",
-       "            SKEW(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
+       "            MEAN(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
        "turbine_id                                                                   \n",
-       "T001                                                        0                \n",
-       "T001                                                        0                \n",
-       "T001                                                        0                \n",
-       "T001                                                        0                \n",
-       "T001                                                        0                \n",
+       "T001                                                      2.0                \n",
+       "T001                                                      2.0                \n",
+       "T001                                                      2.0                \n",
+       "T001                                                      2.0                \n",
+       "T001                                                      2.0                \n",
        "\n",
-       "            SKEW(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \\\n",
+       "            MEAN(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \\\n",
        "turbine_id                                                                \n",
-       "T001                                                        0             \n",
-       "T001                                                        0             \n",
-       "T001                                                        0             \n",
-       "T001                                                        0             \n",
-       "T001                                                        0             \n",
+       "T001                                                      1.0             \n",
+       "T001                                                      1.0             \n",
+       "T001                                                      1.0             \n",
+       "T001                                                      1.0             \n",
+       "T001                                                      1.0             \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))  \\\n",
-       "turbine_id                                                              \n",
-       "T001                                                      0.0           \n",
-       "T001                                                      0.0           \n",
-       "T001                                                      0.0           \n",
-       "T001                                                      0.0           \n",
-       "T001                                                      0.0           \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.DAY(timestamp)))  \\\n",
+       "turbine_id                                                               \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))  \\\n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.YEAR(timestamp)))  \\\n",
        "turbine_id                                                                \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
-       "turbine_id                                                                  \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.WEEKDAY(timestamp)))  \\\n",
+       "turbine_id                                                                   \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \\\n",
-       "turbine_id                                                               \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.MONTH(timestamp)))  \\\n",
+       "turbine_id                                                                 \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))  \\\n",
-       "turbine_id                                                              \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
+       "            MODE(readings.signals.MODE(readings.DAY(timestamp)))  \\\n",
+       "turbine_id                                                         \n",
+       "T001                                                       11      \n",
+       "T001                                                       12      \n",
+       "T001                                                       13      \n",
+       "T001                                                       14      \n",
+       "T001                                                       15      \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))  \\\n",
-       "turbine_id                                                                \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
+       "            MODE(readings.signals.MODE(readings.YEAR(timestamp)))  \\\n",
+       "turbine_id                                                          \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
-       "turbine_id                                                                  \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
+       "            MODE(readings.signals.MODE(readings.WEEKDAY(timestamp)))  \\\n",
+       "turbine_id                                                             \n",
+       "T001                                                        4          \n",
+       "T001                                                        5          \n",
+       "T001                                                        6          \n",
+       "T001                                                        0          \n",
+       "T001                                                        1          \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \n",
-       "turbine_id                                                              \n",
-       "T001                                                     3744           \n",
-       "T001                                                     3744           \n",
-       "T001                                                     3744           \n",
-       "T001                                                     3744           \n",
-       "T001                                                     3744           \n",
+       "            MODE(readings.signals.MODE(readings.MONTH(timestamp)))  \n",
+       "turbine_id                                                          \n",
+       "T001                                                        1       \n",
+       "T001                                                        1       \n",
+       "T001                                                        1       \n",
+       "T001                                                        1       \n",
+       "T001                                                        1       \n",
        "\n",
        "[5 rows x 99 columns]"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1059,7 +725,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
@@ -1068,7 +734,7 @@
        "99"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1080,7 +746,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -1115,51 +781,51 @@
        "      <th>0</th>\n",
        "      <td>T001</td>\n",
        "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>2013-01-10</td>\n",
        "      <td>323.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:10:00</td>\n",
-       "      <td>346.0</td>\n",
+       "      <td>S02</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>320.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:20:00</td>\n",
-       "      <td>407.0</td>\n",
+       "      <td>S03</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>284.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:30:00</td>\n",
-       "      <td>257.0</td>\n",
+       "      <td>S04</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>348.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:40:00</td>\n",
-       "      <td>267.0</td>\n",
+       "      <td>S05</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>273.0</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "text/plain": [
-       "  turbine_id signal_id           timestamp  value\n",
-       "0       T001       S01 2013-01-10 00:00:00  323.0\n",
-       "1       T001       S01 2013-01-10 00:10:00  346.0\n",
-       "2       T001       S01 2013-01-10 00:20:00  407.0\n",
-       "3       T001       S01 2013-01-10 00:30:00  257.0\n",
-       "4       T001       S01 2013-01-10 00:40:00  267.0"
+       "  turbine_id signal_id  timestamp  value\n",
+       "0       T001       S01 2013-01-10  323.0\n",
+       "1       T001       S02 2013-01-10  320.0\n",
+       "2       T001       S03 2013-01-10  284.0\n",
+       "3       T001       S04 2013-01-10  348.0\n",
+       "4       T001       S05 2013-01-10  273.0"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1181,17 +847,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 5\n",
+    "step = 2\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -1200,7 +866,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1211,7 +877,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
@@ -1235,25 +901,25 @@
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
-       "      <th>COUNT(readings)</th>\n",
+       "      <th>SUM(readings.value)</th>\n",
+       "      <th>STD(readings.value)</th>\n",
        "      <th>MAX(readings.value)</th>\n",
-       "      <th>MEAN(readings.value)</th>\n",
+       "      <th>SKEW(readings.value)</th>\n",
        "      <th>MIN(readings.value)</th>\n",
+       "      <th>MEAN(readings.value)</th>\n",
+       "      <th>COUNT(readings)</th>\n",
        "      <th>NUM_UNIQUE(readings.signal_id)</th>\n",
-       "      <th>SKEW(readings.value)</th>\n",
-       "      <th>STD(readings.value)</th>\n",
-       "      <th>SUM(readings.value)</th>\n",
-       "      <th>MODE(readings.DAY(timestamp))</th>\n",
-       "      <th>MODE(readings.MONTH(timestamp))</th>\n",
+       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
+       "      <th>NUM_UNIQUE(readings.MONTH(timestamp))</th>\n",
        "      <th>...</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
-       "      <th>STD(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))</th>\n",
-       "      <th>SUM(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.DAY(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.WEEKDAY(timestamp)))</th>\n",
+       "      <th>NUM_UNIQUE(readings.signals.MODE(readings.MONTH(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.DAY(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.YEAR(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.WEEKDAY(timestamp)))</th>\n",
+       "      <th>MODE(readings.signals.MODE(readings.MONTH(timestamp)))</th>\n",
        "      <th>MODE(readings.signal_id)=S01</th>\n",
        "      <th>MODE(readings.signals.MODE(readings.turbine_id))=T001</th>\n",
        "    </tr>\n",
@@ -1285,121 +951,121 @@
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.433649e+09</td>\n",
+       "      <td>1.456860e+06</td>\n",
        "      <td>3448719.0</td>\n",
-       "      <td>917107.079193</td>\n",
+       "      <td>1.019214</td>\n",
        "      <td>0.0</td>\n",
+       "      <td>917107.079193</td>\n",
+       "      <td>3744</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.019214</td>\n",
-       "      <td>1.456860e+06</td>\n",
-       "      <td>3.433649e+09</td>\n",
-       "      <td>11</td>\n",
+       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>11</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>4</td>\n",
+       "      <td>1</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.441489e+09</td>\n",
+       "      <td>1.459865e+06</td>\n",
        "      <td>3453777.0</td>\n",
-       "      <td>919201.162179</td>\n",
+       "      <td>1.018761</td>\n",
        "      <td>0.0</td>\n",
+       "      <td>919201.162179</td>\n",
+       "      <td>3744</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.018761</td>\n",
-       "      <td>1.459865e+06</td>\n",
-       "      <td>3.441489e+09</td>\n",
-       "      <td>12</td>\n",
+       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>12</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>5</td>\n",
+       "      <td>1</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.455470e+09</td>\n",
+       "      <td>1.465277e+06</td>\n",
        "      <td>3463880.0</td>\n",
-       "      <td>922935.352244</td>\n",
+       "      <td>1.018192</td>\n",
        "      <td>2.7</td>\n",
+       "      <td>922935.352244</td>\n",
+       "      <td>3744</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.018192</td>\n",
-       "      <td>1.465277e+06</td>\n",
-       "      <td>3.455470e+09</td>\n",
-       "      <td>13</td>\n",
+       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>13</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>6</td>\n",
+       "      <td>1</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>3.475361e+09</td>\n",
+       "      <td>1.473337e+06</td>\n",
        "      <td>3474703.0</td>\n",
-       "      <td>928248.092869</td>\n",
+       "      <td>1.017666</td>\n",
        "      <td>-1.0</td>\n",
+       "      <td>928248.092869</td>\n",
+       "      <td>3744</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.017666</td>\n",
-       "      <td>1.473337e+06</td>\n",
-       "      <td>3.475361e+09</td>\n",
-       "      <td>14</td>\n",
+       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>14</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>3744</td>\n",
+       "      <td>2.888083e+09</td>\n",
+       "      <td>1.477958e+06</td>\n",
        "      <td>3485019.0</td>\n",
-       "      <td>924186.531200</td>\n",
+       "      <td>1.032002</td>\n",
        "      <td>0.0</td>\n",
+       "      <td>924186.531200</td>\n",
+       "      <td>3744</td>\n",
        "      <td>26</td>\n",
-       "      <td>1.032002</td>\n",
-       "      <td>1.477958e+06</td>\n",
-       "      <td>2.888083e+09</td>\n",
-       "      <td>15</td>\n",
+       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>0.0</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
-       "      <td>7488</td>\n",
-       "      <td>3744</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>15</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
@@ -1409,101 +1075,109 @@
        "</div>"
       ],
       "text/plain": [
-       "            COUNT(readings)  MAX(readings.value)  MEAN(readings.value)  \\\n",
-       "turbine_id                                                               \n",
-       "T001                   3744            3448719.0         917107.079193   \n",
-       "T001                   3744            3453777.0         919201.162179   \n",
-       "T001                   3744            3463880.0         922935.352244   \n",
-       "T001                   3744            3474703.0         928248.092869   \n",
-       "T001                   3744            3485019.0         924186.531200   \n",
+       "            SUM(readings.value)  STD(readings.value)  MAX(readings.value)  \\\n",
+       "turbine_id                                                                  \n",
+       "T001               3.433649e+09         1.456860e+06            3448719.0   \n",
+       "T001               3.441489e+09         1.459865e+06            3453777.0   \n",
+       "T001               3.455470e+09         1.465277e+06            3463880.0   \n",
+       "T001               3.475361e+09         1.473337e+06            3474703.0   \n",
+       "T001               2.888083e+09         1.477958e+06            3485019.0   \n",
        "\n",
-       "            MIN(readings.value)  NUM_UNIQUE(readings.signal_id)  \\\n",
-       "turbine_id                                                        \n",
-       "T001                        0.0                              26   \n",
-       "T001                        0.0                              26   \n",
-       "T001                        2.7                              26   \n",
-       "T001                       -1.0                              26   \n",
-       "T001                        0.0                              26   \n",
+       "            SKEW(readings.value)  MIN(readings.value)  MEAN(readings.value)  \\\n",
+       "turbine_id                                                                    \n",
+       "T001                    1.019214                  0.0         917107.079193   \n",
+       "T001                    1.018761                  0.0         919201.162179   \n",
+       "T001                    1.018192                  2.7         922935.352244   \n",
+       "T001                    1.017666                 -1.0         928248.092869   \n",
+       "T001                    1.032002                  0.0         924186.531200   \n",
        "\n",
-       "            SKEW(readings.value)  STD(readings.value)  SUM(readings.value)  \\\n",
-       "turbine_id                                                                   \n",
-       "T001                    1.019214         1.456860e+06         3.433649e+09   \n",
-       "T001                    1.018761         1.459865e+06         3.441489e+09   \n",
-       "T001                    1.018192         1.465277e+06         3.455470e+09   \n",
-       "T001                    1.017666         1.473337e+06         3.475361e+09   \n",
-       "T001                    1.032002         1.477958e+06         2.888083e+09   \n",
+       "            COUNT(readings)  NUM_UNIQUE(readings.signal_id)  \\\n",
+       "turbine_id                                                    \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
+       "T001                   3744                              26   \n",
        "\n",
-       "            MODE(readings.DAY(timestamp))  MODE(readings.MONTH(timestamp))  \\\n",
-       "turbine_id                                                                   \n",
-       "T001                                   11                                1   \n",
-       "T001                                   12                                1   \n",
-       "T001                                   13                                1   \n",
-       "T001                                   14                                1   \n",
-       "T001                                   15                                1   \n",
+       "            NUM_UNIQUE(readings.DAY(timestamp))  \\\n",
+       "turbine_id                                        \n",
+       "T001                                          2   \n",
+       "T001                                          2   \n",
+       "T001                                          2   \n",
+       "T001                                          2   \n",
+       "T001                                          2   \n",
+       "\n",
+       "            NUM_UNIQUE(readings.MONTH(timestamp))  ...  \\\n",
+       "turbine_id                                         ...   \n",
+       "T001                                            1  ...   \n",
+       "T001                                            1  ...   \n",
+       "T001                                            1  ...   \n",
+       "T001                                            1  ...   \n",
+       "T001                                            1  ...   \n",
        "\n",
-       "            ...  STD(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))  \\\n",
-       "turbine_id  ...                                                              \n",
-       "T001        ...                                                0.0           \n",
-       "T001        ...                                                0.0           \n",
-       "T001        ...                                                0.0           \n",
-       "T001        ...                                                0.0           \n",
-       "T001        ...                                                0.0           \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.DAY(timestamp)))  \\\n",
+       "turbine_id                                                               \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
+       "T001                                                        1            \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))  \\\n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.YEAR(timestamp)))  \\\n",
        "turbine_id                                                                \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
-       "T001                                                      0.0             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
+       "T001                                                        1             \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
-       "turbine_id                                                                  \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
-       "T001                                                      0.0               \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.WEEKDAY(timestamp)))  \\\n",
+       "turbine_id                                                                   \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
+       "T001                                                        1                \n",
        "\n",
-       "            STD(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \\\n",
-       "turbine_id                                                               \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
-       "T001                                                      0.0            \n",
+       "            NUM_UNIQUE(readings.signals.MODE(readings.MONTH(timestamp)))  \\\n",
+       "turbine_id                                                                 \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
+       "T001                                                        1              \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.DAY(timestamp)))  \\\n",
-       "turbine_id                                                              \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
-       "T001                                                     7488           \n",
+       "            MODE(readings.signals.MODE(readings.DAY(timestamp)))  \\\n",
+       "turbine_id                                                         \n",
+       "T001                                                       11      \n",
+       "T001                                                       12      \n",
+       "T001                                                       13      \n",
+       "T001                                                       14      \n",
+       "T001                                                       15      \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.MONTH(timestamp)))  \\\n",
-       "turbine_id                                                                \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
-       "T001                                                     3744             \n",
+       "            MODE(readings.signals.MODE(readings.YEAR(timestamp)))  \\\n",
+       "turbine_id                                                          \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
+       "T001                                                     2013       \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.WEEKDAY(timestamp)))  \\\n",
-       "turbine_id                                                                  \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
-       "T001                                                     7488               \n",
+       "            MODE(readings.signals.MODE(readings.WEEKDAY(timestamp)))  \\\n",
+       "turbine_id                                                             \n",
+       "T001                                                        4          \n",
+       "T001                                                        5          \n",
+       "T001                                                        6          \n",
+       "T001                                                        0          \n",
+       "T001                                                        1          \n",
        "\n",
-       "            SUM(readings.signals.NUM_UNIQUE(readings.YEAR(timestamp)))  \\\n",
-       "turbine_id                                                               \n",
-       "T001                                                     3744            \n",
-       "T001                                                     3744            \n",
-       "T001                                                     3744            \n",
-       "T001                                                     3744            \n",
-       "T001                                                     3744            \n",
+       "            MODE(readings.signals.MODE(readings.MONTH(timestamp)))  \\\n",
+       "turbine_id                                                           \n",
+       "T001                                                        1        \n",
+       "T001                                                        1        \n",
+       "T001                                                        1        \n",
+       "T001                                                        1        \n",
+       "T001                                                        1        \n",
        "\n",
        "            MODE(readings.signal_id)=S01  \\\n",
        "turbine_id                                 \n",
@@ -1524,7 +1198,7 @@
        "[5 rows x 99 columns]"
       ]
      },
-     "execution_count": 27,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1535,7 +1209,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
@@ -1570,51 +1244,51 @@
        "      <th>0</th>\n",
        "      <td>T001</td>\n",
        "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>2013-01-10</td>\n",
        "      <td>323.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:10:00</td>\n",
-       "      <td>346.0</td>\n",
+       "      <td>S02</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>320.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:20:00</td>\n",
-       "      <td>407.0</td>\n",
+       "      <td>S03</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>284.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:30:00</td>\n",
-       "      <td>257.0</td>\n",
+       "      <td>S04</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>348.0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
        "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10 00:40:00</td>\n",
-       "      <td>267.0</td>\n",
+       "      <td>S05</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>273.0</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "text/plain": [
-       "  turbine_id signal_id           timestamp  value\n",
-       "0       T001       S01 2013-01-10 00:00:00  323.0\n",
-       "1       T001       S01 2013-01-10 00:10:00  346.0\n",
-       "2       T001       S01 2013-01-10 00:20:00  407.0\n",
-       "3       T001       S01 2013-01-10 00:30:00  257.0\n",
-       "4       T001       S01 2013-01-10 00:40:00  267.0"
+       "  turbine_id signal_id  timestamp  value\n",
+       "0       T001       S01 2013-01-10  323.0\n",
+       "1       T001       S02 2013-01-10  320.0\n",
+       "2       T001       S03 2013-01-10  284.0\n",
+       "3       T001       S04 2013-01-10  348.0\n",
+       "4       T001       S05 2013-01-10  273.0"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1636,17 +1310,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 6\n",
+    "step = 3\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -1655,7 +1329,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 30,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1667,7 +1341,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -1681,7 +1355,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.12"
+   "version": "3.7.11"
   }
  },
  "nbformat": 4,
diff --git a/tutorials/pipelines/unstack_normalize_dfs_xgb_classifier.ipynb b/tutorials/pipelines/dfs_xgb_with_unstack_normalization.ipynb
similarity index 68%
rename from tutorials/pipelines/unstack_normalize_dfs_xgb_classifier.ipynb
rename to tutorials/pipelines/dfs_xgb_with_unstack_normalization.ipynb
index 84530a2..5731706 100644
--- a/tutorials/pipelines/unstack_normalize_dfs_xgb_classifier.ipynb
+++ b/tutorials/pipelines/dfs_xgb_with_unstack_normalization.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# unstack_normalize_dfs_xgb_classifier"
+    "# dfs_xgb_with_unstack_normalization"
    ]
   },
   {
@@ -24,14 +24,23 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "pipeline_name = 'classes.unstack_normalize_dfs_xgb_classifier'"
+    "pipeline_name = 'dfs_xgb_with_unstack_normalization'"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/Users/sarah/opt/anaconda3/envs/draco/lib/python3.7/site-packages/dask/dataframe/utils.py:14: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
+      "  import pandas.util.testing as tm\n"
+     ]
+    }
+   ],
    "source": [
     "from draco.pipeline import DracoPipeline\n",
     "\n",
@@ -46,10 +55,8 @@
     {
      "data": {
       "text/plain": [
-       "['pandas.DataFrame.resample',\n",
-       " 'pandas.DataFrame.unstack',\n",
-       " 'featuretools.EntitySet.entity_from_dataframe',\n",
-       " 'featuretools.EntitySet.normalize_entity',\n",
+       "['mlblocks.MLPipeline',\n",
+       " 'mlblocks.MLPipeline',\n",
        " 'featuretools.dfs',\n",
        " 'mlprimitives.custom.feature_extraction.CategoricalEncoder',\n",
        " 'xgboost.XGBClassifier']"
@@ -267,12 +274,20 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## pandas.DataFrame.resample\n",
+    "## mlblocks.MLPipeline 1\n",
+    "\n",
+    "### pandas.DataFrame.resample\n",
     "\n",
     "* Input: readings\n",
     "* Output: readings (resampled)\n",
     "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
-    "  signal_id and timestamp have been set as a multi-index"
+    "  signal_id and timestamp have been set as a multi-index\n",
+    "  \n",
+    "### pandas.DataFrame.unstack\n",
+    "\n",
+    "* Input: readings (resampled)\n",
+    "* Output: readings (unstacked)\n",
+    "* Effect: readings have been unstacked"
    ]
   },
   {
@@ -309,130 +324,6 @@
    "cell_type": "code",
    "execution_count": 9,
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"5\" valign=\"top\">T001</th>\n",
-       "      <th rowspan=\"5\" valign=\"top\">S01</th>\n",
-       "      <th>2013-01-10 00:00:00</th>\n",
-       "      <td>323.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 00:10:00</th>\n",
-       "      <td>346.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 00:20:00</th>\n",
-       "      <td>407.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 00:30:00</th>\n",
-       "      <td>257.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 00:40:00</th>\n",
-       "      <td>267.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                                          value\n",
-       "turbine_id signal_id timestamp                 \n",
-       "T001       S01       2013-01-10 00:00:00  323.0\n",
-       "                     2013-01-10 00:10:00  346.0\n",
-       "                     2013-01-10 00:20:00  407.0\n",
-       "                     2013-01-10 00:30:00  257.0\n",
-       "                     2013-01-10 00:40:00  267.0"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.unstack\n",
-    "\n",
-    "* Input: readings (resampled)\n",
-    "* Output: readings (unstacked)\n",
-    "* Effect: readings have been unstacked"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 1\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -636,7 +527,7 @@
        "[5 rows x 28 columns]"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -649,72 +540,15 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "##  featuretools.EntitySet.entity_from_dataframe\n",
+    "## mlblocks.MLPipeline 2\n",
+    "\n",
+    "###  featuretools.EntitySet.entity_from_dataframe\n",
     "\n",
     "* Input: readings (resampled)\n",
     "* Output: entityset\n",
-    "* Effect: Entityset has been generated from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 2\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y', 'entityset'])"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Entityset: entityset\n",
-       "  Entities:\n",
-       "    readings [Rows: 51121, Columns: 29]\n",
-       "  Relationships:\n",
-       "    No relationships"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['entityset']"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## featuretools.EntitySet.normalize_entity\n",
+    "* Effect: Entityset has been generated from readings\n",
+    "\n",
+    "### featuretools.EntitySet.normalize_entity\n",
     "\n",
     "* Input: entityset\n",
     "* Output: entityset with relationship (readings.turbine_id with turbines.turbine_id)\n",
@@ -723,26 +557,26 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 3\n",
+    "step = 1\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
+       "dict_keys(['readings', 'turbines', 'X', 'y', 'entityset'])"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -753,7 +587,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -767,7 +601,7 @@
        "    readings.turbine_id -> turbines.turbine_id"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -789,17 +623,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 4\n",
+    "step = 2\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -808,7 +642,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -819,7 +653,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -843,27 +677,27 @@
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
-       "      <th>COUNT(readings)</th>\n",
-       "      <th>MAX(readings.value_S01)</th>\n",
-       "      <th>MAX(readings.value_S02)</th>\n",
-       "      <th>MAX(readings.value_S03)</th>\n",
-       "      <th>MAX(readings.value_S04)</th>\n",
-       "      <th>MAX(readings.value_S05)</th>\n",
-       "      <th>MAX(readings.value_S06)</th>\n",
-       "      <th>MAX(readings.value_S07)</th>\n",
-       "      <th>MAX(readings.value_S08)</th>\n",
-       "      <th>MAX(readings.value_S09)</th>\n",
-       "      <th>...</th>\n",
+       "      <th>SUM(readings.value_S14)</th>\n",
+       "      <th>SUM(readings.value_S11)</th>\n",
        "      <th>SUM(readings.value_S25)</th>\n",
-       "      <th>SUM(readings.value_S26)</th>\n",
-       "      <th>MODE(readings.DAY(timestamp))</th>\n",
-       "      <th>MODE(readings.MONTH(timestamp))</th>\n",
-       "      <th>MODE(readings.WEEKDAY(timestamp))</th>\n",
-       "      <th>MODE(readings.YEAR(timestamp))</th>\n",
-       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
+       "      <th>SUM(readings.value_S23)</th>\n",
+       "      <th>SUM(readings.value_S17)</th>\n",
+       "      <th>SUM(readings.value_S19)</th>\n",
+       "      <th>SUM(readings.value_S04)</th>\n",
+       "      <th>SUM(readings.value_S05)</th>\n",
+       "      <th>SUM(readings.value_S21)</th>\n",
+       "      <th>SUM(readings.value_S16)</th>\n",
+       "      <th>...</th>\n",
+       "      <th>MEAN(readings.value_S20)</th>\n",
+       "      <th>COUNT(readings)</th>\n",
+       "      <th>NUM_UNIQUE(readings.YEAR(timestamp))</th>\n",
        "      <th>NUM_UNIQUE(readings.MONTH(timestamp))</th>\n",
+       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
        "      <th>NUM_UNIQUE(readings.WEEKDAY(timestamp))</th>\n",
-       "      <th>NUM_UNIQUE(readings.YEAR(timestamp))</th>\n",
+       "      <th>MODE(readings.YEAR(timestamp))</th>\n",
+       "      <th>MODE(readings.MONTH(timestamp))</th>\n",
+       "      <th>MODE(readings.DAY(timestamp))</th>\n",
+       "      <th>MODE(readings.WEEKDAY(timestamp))</th>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>turbine_id</th>\n",
@@ -893,122 +727,122 @@
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>369.0</td>\n",
-       "      <td>376.0</td>\n",
-       "      <td>378.0</td>\n",
-       "      <td>401.0</td>\n",
-       "      <td>317.0</td>\n",
-       "      <td>324.0</td>\n",
-       "      <td>301.0</td>\n",
-       "      <td>3209069.0</td>\n",
-       "      <td>706654.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>465421817.0</td>\n",
+       "      <td>496362516.0</td>\n",
        "      <td>2743.0</td>\n",
-       "      <td>20569.0</td>\n",
-       "      <td>11</td>\n",
+       "      <td>2780.0</td>\n",
+       "      <td>994.6</td>\n",
+       "      <td>3174.0</td>\n",
+       "      <td>19412.0</td>\n",
+       "      <td>17083.0</td>\n",
+       "      <td>3061.0</td>\n",
+       "      <td>550.4</td>\n",
+       "      <td>...</td>\n",
+       "      <td>22.326389</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>4</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>11</td>\n",
+       "      <td>4</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>505.0</td>\n",
-       "      <td>426.0</td>\n",
-       "      <td>393.0</td>\n",
-       "      <td>517.0</td>\n",
-       "      <td>469.0</td>\n",
-       "      <td>407.0</td>\n",
-       "      <td>459.0</td>\n",
-       "      <td>3214181.0</td>\n",
-       "      <td>711718.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>465897578.0</td>\n",
+       "      <td>496952628.0</td>\n",
        "      <td>4237.0</td>\n",
-       "      <td>32991.0</td>\n",
-       "      <td>12</td>\n",
+       "      <td>4640.0</td>\n",
+       "      <td>1166.7</td>\n",
+       "      <td>5112.0</td>\n",
+       "      <td>38289.0</td>\n",
+       "      <td>34344.0</td>\n",
+       "      <td>4919.0</td>\n",
+       "      <td>713.7</td>\n",
+       "      <td>...</td>\n",
+       "      <td>35.166667</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>5</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>12</td>\n",
+       "      <td>5</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>827.0</td>\n",
-       "      <td>794.0</td>\n",
-       "      <td>839.0</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>843.0</td>\n",
-       "      <td>843.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>3223315.0</td>\n",
-       "      <td>719405.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>466806830.0</td>\n",
+       "      <td>498019072.0</td>\n",
        "      <td>9008.0</td>\n",
-       "      <td>63463.0</td>\n",
-       "      <td>13</td>\n",
+       "      <td>9179.0</td>\n",
+       "      <td>1581.7</td>\n",
+       "      <td>9134.0</td>\n",
+       "      <td>86707.0</td>\n",
+       "      <td>78749.0</td>\n",
+       "      <td>9863.0</td>\n",
+       "      <td>916.3</td>\n",
+       "      <td>...</td>\n",
+       "      <td>53.381944</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>6</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>13</td>\n",
+       "      <td>6</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>841.0</td>\n",
-       "      <td>838.0</td>\n",
-       "      <td>849.0</td>\n",
-       "      <td>850.0</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>850.0</td>\n",
-       "      <td>3233989.0</td>\n",
-       "      <td>728250.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>468250434.0</td>\n",
+       "      <td>499530451.0</td>\n",
        "      <td>10073.0</td>\n",
-       "      <td>70393.0</td>\n",
-       "      <td>14</td>\n",
+       "      <td>10310.0</td>\n",
+       "      <td>1690.9</td>\n",
+       "      <td>10674.0</td>\n",
+       "      <td>87907.0</td>\n",
+       "      <td>83264.0</td>\n",
+       "      <td>10638.0</td>\n",
+       "      <td>970.6</td>\n",
+       "      <td>...</td>\n",
+       "      <td>61.423611</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>0</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>14</td>\n",
+       "      <td>0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>825.0</td>\n",
-       "      <td>840.0</td>\n",
-       "      <td>840.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>830.0</td>\n",
-       "      <td>839.0</td>\n",
-       "      <td>3242820.0</td>\n",
-       "      <td>738155.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>371675934.0</td>\n",
+       "      <td>400196323.0</td>\n",
        "      <td>7381.0</td>\n",
-       "      <td>59954.0</td>\n",
-       "      <td>15</td>\n",
+       "      <td>8228.0</td>\n",
+       "      <td>1666.0</td>\n",
+       "      <td>8831.0</td>\n",
+       "      <td>68811.0</td>\n",
+       "      <td>64088.0</td>\n",
+       "      <td>8629.0</td>\n",
+       "      <td>948.8</td>\n",
+       "      <td>...</td>\n",
+       "      <td>87.575221</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
-       "      <td>2013</td>\n",
        "      <td>2</td>\n",
-       "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>1</td>\n",
+       "      <td>15</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
@@ -1017,69 +851,69 @@
        "</div>"
       ],
       "text/plain": [
-       "            COUNT(readings)  MAX(readings.value_S01)  MAX(readings.value_S02)  \\\n",
-       "turbine_id                                                                      \n",
-       "T001                    144                    369.0                    376.0   \n",
-       "T001                    144                    505.0                    426.0   \n",
-       "T001                    144                    827.0                    794.0   \n",
-       "T001                    144                    848.0                    841.0   \n",
-       "T001                    144                    825.0                    840.0   \n",
+       "            SUM(readings.value_S14)  SUM(readings.value_S11)  \\\n",
+       "turbine_id                                                     \n",
+       "T001                    465421817.0              496362516.0   \n",
+       "T001                    465897578.0              496952628.0   \n",
+       "T001                    466806830.0              498019072.0   \n",
+       "T001                    468250434.0              499530451.0   \n",
+       "T001                    371675934.0              400196323.0   \n",
        "\n",
-       "            MAX(readings.value_S03)  MAX(readings.value_S04)  \\\n",
+       "            SUM(readings.value_S25)  SUM(readings.value_S23)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          378.0                    401.0   \n",
-       "T001                          393.0                    517.0   \n",
-       "T001                          839.0                    848.0   \n",
-       "T001                          838.0                    849.0   \n",
-       "T001                          840.0                    844.0   \n",
+       "T001                         2743.0                   2780.0   \n",
+       "T001                         4237.0                   4640.0   \n",
+       "T001                         9008.0                   9179.0   \n",
+       "T001                        10073.0                  10310.0   \n",
+       "T001                         7381.0                   8228.0   \n",
        "\n",
-       "            MAX(readings.value_S05)  MAX(readings.value_S06)  \\\n",
+       "            SUM(readings.value_S17)  SUM(readings.value_S19)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          317.0                    324.0   \n",
-       "T001                          469.0                    407.0   \n",
-       "T001                          843.0                    843.0   \n",
-       "T001                          850.0                    848.0   \n",
-       "T001                          844.0                    830.0   \n",
+       "T001                          994.6                   3174.0   \n",
+       "T001                         1166.7                   5112.0   \n",
+       "T001                         1581.7                   9134.0   \n",
+       "T001                         1690.9                  10674.0   \n",
+       "T001                         1666.0                   8831.0   \n",
        "\n",
-       "            MAX(readings.value_S07)  MAX(readings.value_S08)  \\\n",
+       "            SUM(readings.value_S04)  SUM(readings.value_S05)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          301.0                3209069.0   \n",
-       "T001                          459.0                3214181.0   \n",
-       "T001                          844.0                3223315.0   \n",
-       "T001                          850.0                3233989.0   \n",
-       "T001                          839.0                3242820.0   \n",
+       "T001                        19412.0                  17083.0   \n",
+       "T001                        38289.0                  34344.0   \n",
+       "T001                        86707.0                  78749.0   \n",
+       "T001                        87907.0                  83264.0   \n",
+       "T001                        68811.0                  64088.0   \n",
        "\n",
-       "            MAX(readings.value_S09)  ...  SUM(readings.value_S25)  \\\n",
-       "turbine_id                           ...                            \n",
-       "T001                       706654.0  ...                   2743.0   \n",
-       "T001                       711718.0  ...                   4237.0   \n",
-       "T001                       719405.0  ...                   9008.0   \n",
-       "T001                       728250.0  ...                  10073.0   \n",
-       "T001                       738155.0  ...                   7381.0   \n",
+       "            SUM(readings.value_S21)  SUM(readings.value_S16)  ...  \\\n",
+       "turbine_id                                                    ...   \n",
+       "T001                         3061.0                    550.4  ...   \n",
+       "T001                         4919.0                    713.7  ...   \n",
+       "T001                         9863.0                    916.3  ...   \n",
+       "T001                        10638.0                    970.6  ...   \n",
+       "T001                         8629.0                    948.8  ...   \n",
        "\n",
-       "            SUM(readings.value_S26)  MODE(readings.DAY(timestamp))  \\\n",
-       "turbine_id                                                           \n",
-       "T001                        20569.0                             11   \n",
-       "T001                        32991.0                             12   \n",
-       "T001                        63463.0                             13   \n",
-       "T001                        70393.0                             14   \n",
-       "T001                        59954.0                             15   \n",
+       "            MEAN(readings.value_S20)  COUNT(readings)  \\\n",
+       "turbine_id                                              \n",
+       "T001                       22.326389              144   \n",
+       "T001                       35.166667              144   \n",
+       "T001                       53.381944              144   \n",
+       "T001                       61.423611              144   \n",
+       "T001                       87.575221              144   \n",
        "\n",
-       "            MODE(readings.MONTH(timestamp))  \\\n",
-       "turbine_id                                    \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
+       "            NUM_UNIQUE(readings.YEAR(timestamp))  \\\n",
+       "turbine_id                                         \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
        "\n",
-       "            MODE(readings.WEEKDAY(timestamp))  MODE(readings.YEAR(timestamp))  \\\n",
-       "turbine_id                                                                      \n",
-       "T001                                        4                            2013   \n",
-       "T001                                        5                            2013   \n",
-       "T001                                        6                            2013   \n",
-       "T001                                        0                            2013   \n",
-       "T001                                        1                            2013   \n",
+       "            NUM_UNIQUE(readings.MONTH(timestamp))  \\\n",
+       "turbine_id                                          \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
        "\n",
        "            NUM_UNIQUE(readings.DAY(timestamp))  \\\n",
        "turbine_id                                        \n",
@@ -1089,14 +923,6 @@
        "T001                                          2   \n",
        "T001                                          2   \n",
        "\n",
-       "            NUM_UNIQUE(readings.MONTH(timestamp))  \\\n",
-       "turbine_id                                          \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "\n",
        "            NUM_UNIQUE(readings.WEEKDAY(timestamp))  \\\n",
        "turbine_id                                            \n",
        "T001                                              2   \n",
@@ -1105,18 +931,26 @@
        "T001                                              2   \n",
        "T001                                              2   \n",
        "\n",
-       "            NUM_UNIQUE(readings.YEAR(timestamp))  \n",
-       "turbine_id                                        \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
+       "            MODE(readings.YEAR(timestamp))  MODE(readings.MONTH(timestamp))  \\\n",
+       "turbine_id                                                                    \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "\n",
+       "            MODE(readings.DAY(timestamp))  MODE(readings.WEEKDAY(timestamp))  \n",
+       "turbine_id                                                                    \n",
+       "T001                                   11                                  4  \n",
+       "T001                                   12                                  5  \n",
+       "T001                                   13                                  6  \n",
+       "T001                                   14                                  0  \n",
+       "T001                                   15                                  1  \n",
        "\n",
        "[5 rows x 165 columns]"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1127,7 +961,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -1136,7 +970,7 @@
        "165"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1159,17 +993,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 5\n",
+    "step = 3\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
@@ -1178,7 +1012,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1189,7 +1023,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -1213,27 +1047,27 @@
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
-       "      <th>COUNT(readings)</th>\n",
-       "      <th>MAX(readings.value_S01)</th>\n",
-       "      <th>MAX(readings.value_S02)</th>\n",
-       "      <th>MAX(readings.value_S03)</th>\n",
-       "      <th>MAX(readings.value_S04)</th>\n",
-       "      <th>MAX(readings.value_S05)</th>\n",
-       "      <th>MAX(readings.value_S06)</th>\n",
-       "      <th>MAX(readings.value_S07)</th>\n",
-       "      <th>MAX(readings.value_S08)</th>\n",
-       "      <th>MAX(readings.value_S09)</th>\n",
-       "      <th>...</th>\n",
+       "      <th>SUM(readings.value_S14)</th>\n",
+       "      <th>SUM(readings.value_S11)</th>\n",
        "      <th>SUM(readings.value_S25)</th>\n",
-       "      <th>SUM(readings.value_S26)</th>\n",
-       "      <th>MODE(readings.DAY(timestamp))</th>\n",
-       "      <th>MODE(readings.MONTH(timestamp))</th>\n",
-       "      <th>MODE(readings.WEEKDAY(timestamp))</th>\n",
-       "      <th>MODE(readings.YEAR(timestamp))</th>\n",
-       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
+       "      <th>SUM(readings.value_S23)</th>\n",
+       "      <th>SUM(readings.value_S17)</th>\n",
+       "      <th>SUM(readings.value_S19)</th>\n",
+       "      <th>SUM(readings.value_S04)</th>\n",
+       "      <th>SUM(readings.value_S05)</th>\n",
+       "      <th>SUM(readings.value_S21)</th>\n",
+       "      <th>SUM(readings.value_S16)</th>\n",
+       "      <th>...</th>\n",
+       "      <th>MEAN(readings.value_S20)</th>\n",
+       "      <th>COUNT(readings)</th>\n",
+       "      <th>NUM_UNIQUE(readings.YEAR(timestamp))</th>\n",
        "      <th>NUM_UNIQUE(readings.MONTH(timestamp))</th>\n",
+       "      <th>NUM_UNIQUE(readings.DAY(timestamp))</th>\n",
        "      <th>NUM_UNIQUE(readings.WEEKDAY(timestamp))</th>\n",
-       "      <th>NUM_UNIQUE(readings.YEAR(timestamp))</th>\n",
+       "      <th>MODE(readings.YEAR(timestamp))</th>\n",
+       "      <th>MODE(readings.MONTH(timestamp))</th>\n",
+       "      <th>MODE(readings.DAY(timestamp))</th>\n",
+       "      <th>MODE(readings.WEEKDAY(timestamp))</th>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>turbine_id</th>\n",
@@ -1263,122 +1097,122 @@
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>369.0</td>\n",
-       "      <td>376.0</td>\n",
-       "      <td>378.0</td>\n",
-       "      <td>401.0</td>\n",
-       "      <td>317.0</td>\n",
-       "      <td>324.0</td>\n",
-       "      <td>301.0</td>\n",
-       "      <td>3209069.0</td>\n",
-       "      <td>706654.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>465421817.0</td>\n",
+       "      <td>496362516.0</td>\n",
        "      <td>2743.0</td>\n",
-       "      <td>20569.0</td>\n",
-       "      <td>11</td>\n",
+       "      <td>2780.0</td>\n",
+       "      <td>994.6</td>\n",
+       "      <td>3174.0</td>\n",
+       "      <td>19412.0</td>\n",
+       "      <td>17083.0</td>\n",
+       "      <td>3061.0</td>\n",
+       "      <td>550.4</td>\n",
+       "      <td>...</td>\n",
+       "      <td>22.326389</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>4</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>11</td>\n",
+       "      <td>4</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>505.0</td>\n",
-       "      <td>426.0</td>\n",
-       "      <td>393.0</td>\n",
-       "      <td>517.0</td>\n",
-       "      <td>469.0</td>\n",
-       "      <td>407.0</td>\n",
-       "      <td>459.0</td>\n",
-       "      <td>3214181.0</td>\n",
-       "      <td>711718.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>465897578.0</td>\n",
+       "      <td>496952628.0</td>\n",
        "      <td>4237.0</td>\n",
-       "      <td>32991.0</td>\n",
-       "      <td>12</td>\n",
+       "      <td>4640.0</td>\n",
+       "      <td>1166.7</td>\n",
+       "      <td>5112.0</td>\n",
+       "      <td>38289.0</td>\n",
+       "      <td>34344.0</td>\n",
+       "      <td>4919.0</td>\n",
+       "      <td>713.7</td>\n",
+       "      <td>...</td>\n",
+       "      <td>35.166667</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>5</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>12</td>\n",
+       "      <td>5</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>827.0</td>\n",
-       "      <td>794.0</td>\n",
-       "      <td>839.0</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>843.0</td>\n",
-       "      <td>843.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>3223315.0</td>\n",
-       "      <td>719405.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>466806830.0</td>\n",
+       "      <td>498019072.0</td>\n",
        "      <td>9008.0</td>\n",
-       "      <td>63463.0</td>\n",
-       "      <td>13</td>\n",
+       "      <td>9179.0</td>\n",
+       "      <td>1581.7</td>\n",
+       "      <td>9134.0</td>\n",
+       "      <td>86707.0</td>\n",
+       "      <td>78749.0</td>\n",
+       "      <td>9863.0</td>\n",
+       "      <td>916.3</td>\n",
+       "      <td>...</td>\n",
+       "      <td>53.381944</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>6</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>13</td>\n",
+       "      <td>6</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>841.0</td>\n",
-       "      <td>838.0</td>\n",
-       "      <td>849.0</td>\n",
-       "      <td>850.0</td>\n",
-       "      <td>848.0</td>\n",
-       "      <td>850.0</td>\n",
-       "      <td>3233989.0</td>\n",
-       "      <td>728250.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>468250434.0</td>\n",
+       "      <td>499530451.0</td>\n",
        "      <td>10073.0</td>\n",
-       "      <td>70393.0</td>\n",
-       "      <td>14</td>\n",
+       "      <td>10310.0</td>\n",
+       "      <td>1690.9</td>\n",
+       "      <td>10674.0</td>\n",
+       "      <td>87907.0</td>\n",
+       "      <td>83264.0</td>\n",
+       "      <td>10638.0</td>\n",
+       "      <td>970.6</td>\n",
+       "      <td>...</td>\n",
+       "      <td>61.423611</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
-       "      <td>0</td>\n",
-       "      <td>2013</td>\n",
-       "      <td>2</td>\n",
        "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2013</td>\n",
        "      <td>1</td>\n",
+       "      <td>14</td>\n",
+       "      <td>0</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>T001</th>\n",
-       "      <td>144</td>\n",
-       "      <td>825.0</td>\n",
-       "      <td>840.0</td>\n",
-       "      <td>840.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>844.0</td>\n",
-       "      <td>830.0</td>\n",
-       "      <td>839.0</td>\n",
-       "      <td>3242820.0</td>\n",
-       "      <td>738155.0</td>\n",
-       "      <td>...</td>\n",
+       "      <td>371675934.0</td>\n",
+       "      <td>400196323.0</td>\n",
        "      <td>7381.0</td>\n",
-       "      <td>59954.0</td>\n",
-       "      <td>15</td>\n",
+       "      <td>8228.0</td>\n",
+       "      <td>1666.0</td>\n",
+       "      <td>8831.0</td>\n",
+       "      <td>68811.0</td>\n",
+       "      <td>64088.0</td>\n",
+       "      <td>8629.0</td>\n",
+       "      <td>948.8</td>\n",
+       "      <td>...</td>\n",
+       "      <td>87.575221</td>\n",
+       "      <td>144</td>\n",
        "      <td>1</td>\n",
        "      <td>1</td>\n",
-       "      <td>2013</td>\n",
        "      <td>2</td>\n",
-       "      <td>1</td>\n",
        "      <td>2</td>\n",
+       "      <td>2013</td>\n",
+       "      <td>1</td>\n",
+       "      <td>15</td>\n",
        "      <td>1</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
@@ -1387,69 +1221,69 @@
        "</div>"
       ],
       "text/plain": [
-       "            COUNT(readings)  MAX(readings.value_S01)  MAX(readings.value_S02)  \\\n",
-       "turbine_id                                                                      \n",
-       "T001                    144                    369.0                    376.0   \n",
-       "T001                    144                    505.0                    426.0   \n",
-       "T001                    144                    827.0                    794.0   \n",
-       "T001                    144                    848.0                    841.0   \n",
-       "T001                    144                    825.0                    840.0   \n",
+       "            SUM(readings.value_S14)  SUM(readings.value_S11)  \\\n",
+       "turbine_id                                                     \n",
+       "T001                    465421817.0              496362516.0   \n",
+       "T001                    465897578.0              496952628.0   \n",
+       "T001                    466806830.0              498019072.0   \n",
+       "T001                    468250434.0              499530451.0   \n",
+       "T001                    371675934.0              400196323.0   \n",
        "\n",
-       "            MAX(readings.value_S03)  MAX(readings.value_S04)  \\\n",
+       "            SUM(readings.value_S25)  SUM(readings.value_S23)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          378.0                    401.0   \n",
-       "T001                          393.0                    517.0   \n",
-       "T001                          839.0                    848.0   \n",
-       "T001                          838.0                    849.0   \n",
-       "T001                          840.0                    844.0   \n",
+       "T001                         2743.0                   2780.0   \n",
+       "T001                         4237.0                   4640.0   \n",
+       "T001                         9008.0                   9179.0   \n",
+       "T001                        10073.0                  10310.0   \n",
+       "T001                         7381.0                   8228.0   \n",
        "\n",
-       "            MAX(readings.value_S05)  MAX(readings.value_S06)  \\\n",
+       "            SUM(readings.value_S17)  SUM(readings.value_S19)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          317.0                    324.0   \n",
-       "T001                          469.0                    407.0   \n",
-       "T001                          843.0                    843.0   \n",
-       "T001                          850.0                    848.0   \n",
-       "T001                          844.0                    830.0   \n",
+       "T001                          994.6                   3174.0   \n",
+       "T001                         1166.7                   5112.0   \n",
+       "T001                         1581.7                   9134.0   \n",
+       "T001                         1690.9                  10674.0   \n",
+       "T001                         1666.0                   8831.0   \n",
        "\n",
-       "            MAX(readings.value_S07)  MAX(readings.value_S08)  \\\n",
+       "            SUM(readings.value_S04)  SUM(readings.value_S05)  \\\n",
        "turbine_id                                                     \n",
-       "T001                          301.0                3209069.0   \n",
-       "T001                          459.0                3214181.0   \n",
-       "T001                          844.0                3223315.0   \n",
-       "T001                          850.0                3233989.0   \n",
-       "T001                          839.0                3242820.0   \n",
+       "T001                        19412.0                  17083.0   \n",
+       "T001                        38289.0                  34344.0   \n",
+       "T001                        86707.0                  78749.0   \n",
+       "T001                        87907.0                  83264.0   \n",
+       "T001                        68811.0                  64088.0   \n",
        "\n",
-       "            MAX(readings.value_S09)  ...  SUM(readings.value_S25)  \\\n",
-       "turbine_id                           ...                            \n",
-       "T001                       706654.0  ...                   2743.0   \n",
-       "T001                       711718.0  ...                   4237.0   \n",
-       "T001                       719405.0  ...                   9008.0   \n",
-       "T001                       728250.0  ...                  10073.0   \n",
-       "T001                       738155.0  ...                   7381.0   \n",
+       "            SUM(readings.value_S21)  SUM(readings.value_S16)  ...  \\\n",
+       "turbine_id                                                    ...   \n",
+       "T001                         3061.0                    550.4  ...   \n",
+       "T001                         4919.0                    713.7  ...   \n",
+       "T001                         9863.0                    916.3  ...   \n",
+       "T001                        10638.0                    970.6  ...   \n",
+       "T001                         8629.0                    948.8  ...   \n",
        "\n",
-       "            SUM(readings.value_S26)  MODE(readings.DAY(timestamp))  \\\n",
-       "turbine_id                                                           \n",
-       "T001                        20569.0                             11   \n",
-       "T001                        32991.0                             12   \n",
-       "T001                        63463.0                             13   \n",
-       "T001                        70393.0                             14   \n",
-       "T001                        59954.0                             15   \n",
+       "            MEAN(readings.value_S20)  COUNT(readings)  \\\n",
+       "turbine_id                                              \n",
+       "T001                       22.326389              144   \n",
+       "T001                       35.166667              144   \n",
+       "T001                       53.381944              144   \n",
+       "T001                       61.423611              144   \n",
+       "T001                       87.575221              144   \n",
        "\n",
-       "            MODE(readings.MONTH(timestamp))  \\\n",
-       "turbine_id                                    \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
-       "T001                                      1   \n",
+       "            NUM_UNIQUE(readings.YEAR(timestamp))  \\\n",
+       "turbine_id                                         \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
+       "T001                                           1   \n",
        "\n",
-       "            MODE(readings.WEEKDAY(timestamp))  MODE(readings.YEAR(timestamp))  \\\n",
-       "turbine_id                                                                      \n",
-       "T001                                        4                            2013   \n",
-       "T001                                        5                            2013   \n",
-       "T001                                        6                            2013   \n",
-       "T001                                        0                            2013   \n",
-       "T001                                        1                            2013   \n",
+       "            NUM_UNIQUE(readings.MONTH(timestamp))  \\\n",
+       "turbine_id                                          \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
+       "T001                                            1   \n",
        "\n",
        "            NUM_UNIQUE(readings.DAY(timestamp))  \\\n",
        "turbine_id                                        \n",
@@ -1459,14 +1293,6 @@
        "T001                                          2   \n",
        "T001                                          2   \n",
        "\n",
-       "            NUM_UNIQUE(readings.MONTH(timestamp))  \\\n",
-       "turbine_id                                          \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "T001                                            1   \n",
-       "\n",
        "            NUM_UNIQUE(readings.WEEKDAY(timestamp))  \\\n",
        "turbine_id                                            \n",
        "T001                                              2   \n",
@@ -1475,18 +1301,26 @@
        "T001                                              2   \n",
        "T001                                              2   \n",
        "\n",
-       "            NUM_UNIQUE(readings.YEAR(timestamp))  \n",
-       "turbine_id                                        \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
-       "T001                                           1  \n",
+       "            MODE(readings.YEAR(timestamp))  MODE(readings.MONTH(timestamp))  \\\n",
+       "turbine_id                                                                    \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "T001                                  2013                                1   \n",
+       "\n",
+       "            MODE(readings.DAY(timestamp))  MODE(readings.WEEKDAY(timestamp))  \n",
+       "turbine_id                                                                    \n",
+       "T001                                   11                                  4  \n",
+       "T001                                   12                                  5  \n",
+       "T001                                   13                                  6  \n",
+       "T001                                   14                                  0  \n",
+       "T001                                   15                                  1  \n",
        "\n",
        "[5 rows x 165 columns]"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1497,7 +1331,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -1702,7 +1536,7 @@
        "[5 rows x 28 columns]"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1724,17 +1558,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [],
    "source": [
-    "step = 6\n",
+    "step = 4\n",
     "context = pipeline.fit(**context, output_=step, start_=step)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -1743,7 +1577,7 @@
        "dict_keys(['readings', 'turbines', 'entityset', 'X', 'y'])"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1755,7 +1589,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -1769,7 +1603,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.12"
+   "version": "3.7.11"
   }
  },
  "nbformat": 4,
diff --git a/tutorials/pipelines/double_lstm_with_unstack.ipynb b/tutorials/pipelines/double_lstm_with_unstack.ipynb
new file mode 100644
index 0000000..4bc7d0f
--- /dev/null
+++ b/tutorials/pipelines/double_lstm_with_unstack.ipynb
@@ -0,0 +1,2375 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# double_lstm_with_unstack"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.demo import load_demo\n",
+    "\n",
+    "target_times, readings = load_demo()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pipeline_name = 'double_lstm_with_unstack'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.pipeline import DracoPipeline\n",
+    "\n",
+    "pipeline = DracoPipeline(pipeline_name)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['mlblocks.MLPipeline',\n",
+       " 'pandas.DataFrame.pop',\n",
+       " 'pandas.DataFrame.pop',\n",
+       " 'sklearn.impute.SimpleImputer',\n",
+       " 'sklearn.preprocessing.MinMaxScaler',\n",
+       " 'pandas.DataFrame',\n",
+       " 'pandas.DataFrame.set',\n",
+       " 'pandas.DataFrame.set',\n",
+       " 'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences',\n",
+       " 'keras.Sequential.DoubleLSTMTimeSeriesClassifier']"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pipeline.template['primitives']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Step by Step execution"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Input Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>signal_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>323.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S02</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>320.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S03</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>284.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S04</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>348.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S05</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>273.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id signal_id  timestamp  value\n",
+       "0       T001       S01 2013-01-10  323.0\n",
+       "1       T001       S02 2013-01-10  320.0\n",
+       "2       T001       S03 2013-01-10  284.0\n",
+       "3       T001       S04 2013-01-10  348.0\n",
+       "4       T001       S05 2013-01-10  273.0"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-12</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-13</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-14</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-15</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-16</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id cutoff_time  target\n",
+       "0       T001  2013-01-12       0\n",
+       "1       T001  2013-01-13       0\n",
+       "2       T001  2013-01-14       0\n",
+       "3       T001  2013-01-15       1\n",
+       "4       T001  2013-01-16       0"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Data Preparation (part of Draco Pipeline)\n",
+    "\n",
+    "* Input: target_times, readings, turbines\n",
+    "* Output: X, y, readings, turbines\n",
+    "* Effect: target_times has been split into X and y"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## mlblocks.MLPipeline\n",
+    "\n",
+    "### pandas.DataFrame.resample\n",
+    "\n",
+    "* Input: readings\n",
+    "* Output: readings (resampled)\n",
+    "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
+    "  signal_id and timestamp have been set as a multi-index\n",
+    "  \n",
+    "### pandas.DataFrame.unstack\n",
+    "\n",
+    "* Input: readings (resampled)\n",
+    "* Output: readings (unstacked)\n",
+    "* Effect: readings have been unstacked"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "context = pipeline.fit(target_times, readings, output_=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 28 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id           timestamp  value_S01  value_S02  value_S03  value_S04  \\\n",
+       "0       T001 2013-01-10 00:00:00      323.0      320.0      284.0      348.0   \n",
+       "1       T001 2013-01-10 00:10:00      346.0      384.0      367.0      411.0   \n",
+       "2       T001 2013-01-10 00:20:00      407.0      363.0      407.0      393.0   \n",
+       "3       T001 2013-01-10 00:30:00      257.0      307.0      315.0      361.0   \n",
+       "4       T001 2013-01-10 00:40:00      267.0      309.0      314.0      355.0   \n",
+       "\n",
+       "   value_S05  value_S06  value_S07  value_S08  ...  value_S17  value_S18  \\\n",
+       "0      273.0      342.0      280.0  3197842.0  ...       11.7  3131020.0   \n",
+       "1      331.0      360.0      249.0  3197900.0  ...       10.2  3131420.0   \n",
+       "2      275.0      335.0      270.0  3197968.0  ...        9.5  3131822.0   \n",
+       "3      317.0      354.0      271.0  3198011.0  ...       10.5  3132179.0   \n",
+       "4      262.0      246.0      212.0  3198056.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 28 columns]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (unstacked)\n",
+    "* Output: readings (without turbine_id), turbine_id\n",
+    "* Effect: turbine_id has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 1\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y', 'turbine_id'])"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0    T001\n",
+       "1    T001\n",
+       "2    T001\n",
+       "3    T001\n",
+       "4    T001\n",
+       "Name: turbine_id, dtype: object"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['turbine_id'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>value_S09</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>695000.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>695063.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>695124.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>695175.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>695226.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 27 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "            timestamp  value_S01  value_S02  value_S03  value_S04  value_S05  \\\n",
+       "0 2013-01-10 00:00:00      323.0      320.0      284.0      348.0      273.0   \n",
+       "1 2013-01-10 00:10:00      346.0      384.0      367.0      411.0      331.0   \n",
+       "2 2013-01-10 00:20:00      407.0      363.0      407.0      393.0      275.0   \n",
+       "3 2013-01-10 00:30:00      257.0      307.0      315.0      361.0      317.0   \n",
+       "4 2013-01-10 00:40:00      267.0      309.0      314.0      355.0      262.0   \n",
+       "\n",
+       "   value_S06  value_S07  value_S08  value_S09  ...  value_S17  value_S18  \\\n",
+       "0      342.0      280.0  3197842.0   695000.0  ...       11.7  3131020.0   \n",
+       "1      360.0      249.0  3197900.0   695063.0  ...       10.2  3131420.0   \n",
+       "2      335.0      270.0  3197968.0   695124.0  ...        9.5  3131822.0   \n",
+       "3      354.0      271.0  3198011.0   695175.0  ...       10.5  3132179.0   \n",
+       "4      246.0      212.0  3198056.0   695226.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 27 columns]"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (without turbine_id)\n",
+    "* Output: readings (without timestamp), timestamp\n",
+    "* Effect: timestamp has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 2\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'X', 'y', 'timestamp'])"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0   2013-01-10 00:00:00\n",
+       "1   2013-01-10 00:10:00\n",
+       "2   2013-01-10 00:20:00\n",
+       "3   2013-01-10 00:30:00\n",
+       "4   2013-01-10 00:40:00\n",
+       "Name: timestamp, dtype: datetime64[ns]"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['timestamp'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>value_S09</th>\n",
+       "      <th>value_S10</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>695000.0</td>\n",
+       "      <td>3348234.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>695063.0</td>\n",
+       "      <td>3348296.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>695124.0</td>\n",
+       "      <td>3348363.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>695175.0</td>\n",
+       "      <td>3348416.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>695226.0</td>\n",
+       "      <td>3348470.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   value_S01  value_S02  value_S03  value_S04  value_S05  value_S06  \\\n",
+       "0      323.0      320.0      284.0      348.0      273.0      342.0   \n",
+       "1      346.0      384.0      367.0      411.0      331.0      360.0   \n",
+       "2      407.0      363.0      407.0      393.0      275.0      335.0   \n",
+       "3      257.0      307.0      315.0      361.0      317.0      354.0   \n",
+       "4      267.0      309.0      314.0      355.0      262.0      246.0   \n",
+       "\n",
+       "   value_S07  value_S08  value_S09  value_S10  ...  value_S17  value_S18  \\\n",
+       "0      280.0  3197842.0   695000.0  3348234.0  ...       11.7  3131020.0   \n",
+       "1      249.0  3197900.0   695063.0  3348296.0  ...       10.2  3131420.0   \n",
+       "2      270.0  3197968.0   695124.0  3348363.0  ...        9.5  3131822.0   \n",
+       "3      271.0  3198011.0   695175.0  3348416.0  ...       10.5  3132179.0   \n",
+       "4      212.0  3198056.0   695226.0  3348470.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## sklearn.impute.SimpleImputer\n",
+    "\n",
+    "* Input: readings (unstacked, no turbine_id, no timestamp)\n",
+    "* Output: readings (imputed, numpy array)\n",
+    "* Effect: readings have been imputed and converted to numpy array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 3\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[3.230000e+02, 3.200000e+02, 2.840000e+02, 3.480000e+02,\n",
+       "        2.730000e+02, 3.420000e+02, 2.800000e+02, 3.197842e+06,\n",
+       "        6.950000e+05, 3.348234e+06, 3.436762e+06, 3.322362e+06,\n",
+       "        3.357952e+06, 3.223797e+06, 8.300000e+00, 6.000000e+00,\n",
+       "        1.170000e+01, 3.131020e+06, 5.500000e+01, 5.500000e+01,\n",
+       "        4.700000e+01, 5.800000e+01, 4.500000e+01, 5.800000e+01,\n",
+       "        4.700000e+01, 3.560000e+02],\n",
+       "       [3.460000e+02, 3.840000e+02, 3.670000e+02, 4.110000e+02,\n",
+       "        3.310000e+02, 3.600000e+02, 2.490000e+02, 3.197900e+06,\n",
+       "        6.950630e+05, 3.348296e+06, 3.436829e+06, 3.322417e+06,\n",
+       "        3.358013e+06, 3.223839e+06, 7.600000e+00, 5.000000e+00,\n",
+       "        1.020000e+01, 3.131420e+06, 5.800000e+01, 6.300000e+01,\n",
+       "        6.200000e+01, 6.700000e+01, 5.500000e+01, 6.100000e+01,\n",
+       "        4.200000e+01, 4.000000e+02],\n",
+       "       [4.070000e+02, 3.630000e+02, 4.070000e+02, 3.930000e+02,\n",
+       "        2.750000e+02, 3.350000e+02, 2.700000e+02, 3.197968e+06,\n",
+       "        6.951240e+05, 3.348363e+06, 3.436895e+06, 3.322463e+06,\n",
+       "        3.358068e+06, 3.223884e+06, 7.800000e+00, 5.700000e+00,\n",
+       "        9.500000e+00, 3.131822e+06, 6.800000e+01, 6.100000e+01,\n",
+       "        6.700000e+01, 6.600000e+01, 4.600000e+01, 5.500000e+01,\n",
+       "        4.500000e+01, 4.020000e+02],\n",
+       "       [2.570000e+02, 3.070000e+02, 3.150000e+02, 3.610000e+02,\n",
+       "        3.170000e+02, 3.540000e+02, 2.710000e+02, 3.198011e+06,\n",
+       "        6.951750e+05, 3.348416e+06, 3.436957e+06, 3.322516e+06,\n",
+       "        3.358128e+06, 3.223929e+06, 8.600000e+00, 6.600000e+00,\n",
+       "        1.050000e+01, 3.132179e+06, 4.300000e+01, 5.100000e+01,\n",
+       "        5.300000e+01, 6.200000e+01, 5.300000e+01, 6.000000e+01,\n",
+       "        4.500000e+01, 3.570000e+02],\n",
+       "       [2.670000e+02, 3.090000e+02, 3.140000e+02, 3.550000e+02,\n",
+       "        2.620000e+02, 2.460000e+02, 2.120000e+02, 3.198056e+06,\n",
+       "        6.952260e+05, 3.348470e+06, 3.437016e+06, 3.322559e+06,\n",
+       "        3.358169e+06, 3.223965e+06, 7.500000e+00, 5.900000e+00,\n",
+       "        9.600000e+00, 3.132501e+06, 4.500000e+01, 5.100000e+01,\n",
+       "        5.400000e+01, 5.900000e+01, 4.300000e+01, 4.100000e+01,\n",
+       "        3.600000e+01, 3.220000e+02]])"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## sklearn.preprocessing.MinMaxScaler\n",
+    "\n",
+    "* Input: (imputed, array)\n",
+    "* Output: readings (scaled, array)\n",
+    "* Effect: readings have been scaled to [-1, 1] range"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 4\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-0.23563892, -0.24267292, -0.3286385 , -0.17702227, -0.35287222,\n",
+       "        -0.19248826, -0.3317757 , -1.        , -1.        , -1.        ,\n",
+       "        -1.        , -1.        , -1.        , -1.        , -0.11702128,\n",
+       "        -0.24050633, -0.25714286, -0.37378787, -0.22758621, -0.22758621,\n",
+       "        -0.31972789, -0.1862069 , -0.36986301, -0.1862069 , -0.33793103,\n",
+       "        -0.26141079],\n",
+       "       [-0.18171161, -0.0926143 , -0.13380282, -0.02930832, -0.21688159,\n",
+       "        -0.15023474, -0.40420561, -0.99995911, -0.99995779, -0.99995941,\n",
+       "        -0.99995718, -0.99996326, -0.99996042, -0.99997164, -0.19148936,\n",
+       "        -0.36708861, -0.35238095, -0.37370786, -0.1862069 , -0.11724138,\n",
+       "        -0.11564626, -0.06206897, -0.23287671, -0.14482759, -0.40689655,\n",
+       "        -0.17012448],\n",
+       "       [-0.03868699, -0.14185229, -0.0399061 , -0.07151231, -0.34818288,\n",
+       "        -0.20892019, -0.35514019, -0.99991116, -0.99991693, -0.99991555,\n",
+       "        -0.999915  , -0.99993254, -0.99992474, -0.99994125, -0.17021277,\n",
+       "        -0.27848101, -0.3968254 , -0.37362746, -0.04827586, -0.14482759,\n",
+       "        -0.04761905, -0.07586207, -0.35616438, -0.22758621, -0.36551724,\n",
+       "        -0.1659751 ],\n",
+       "       [-0.39038687, -0.27315358, -0.25586854, -0.14654162, -0.24970692,\n",
+       "        -0.16431925, -0.35280374, -0.99988085, -0.99988276, -0.99988086,\n",
+       "        -0.99987538, -0.99989714, -0.99988581, -0.99991086, -0.08510638,\n",
+       "        -0.16455696, -0.33333333, -0.37355606, -0.39310345, -0.28275862,\n",
+       "        -0.23809524, -0.13103448, -0.26027397, -0.15862069, -0.36551724,\n",
+       "        -0.2593361 ],\n",
+       "       [-0.36694021, -0.26846424, -0.25821596, -0.16060961, -0.37866354,\n",
+       "        -0.41784038, -0.49065421, -0.99984912, -0.99984859, -0.99984551,\n",
+       "        -0.99983767, -0.99986841, -0.99985921, -0.99988655, -0.20212766,\n",
+       "        -0.25316456, -0.39047619, -0.37349166, -0.36551724, -0.28275862,\n",
+       "        -0.2244898 , -0.17241379, -0.39726027, -0.42068966, -0.48965517,\n",
+       "        -0.33195021]])"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame\n",
+    "\n",
+    "* Input: readings (scaled, array)\n",
+    "* Output: readings (dataframe)\n",
+    "* Effect: readings have been converted into a dataframe"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 5\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 25,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>16</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.257143</td>\n",
+       "      <td>-0.373788</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.352381</td>\n",
+       "      <td>-0.373708</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.396825</td>\n",
+       "      <td>-0.373627</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.333333</td>\n",
+       "      <td>-0.373556</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.390476</td>\n",
+       "      <td>-0.373492</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "         0         1         2         3         4         5         6   \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "         7         8         9   ...        16        17        18        19  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.257143 -0.373788 -0.227586 -0.227586   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.352381 -0.373708 -0.186207 -0.117241   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.396825 -0.373627 -0.048276 -0.144828   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.333333 -0.373556 -0.393103 -0.282759   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.390476 -0.373492 -0.365517 -0.282759   \n",
+       "\n",
+       "         20        21        22        23        24        25  \n",
+       "0 -0.319728 -0.186207 -0.369863 -0.186207 -0.337931 -0.261411  \n",
+       "1 -0.115646 -0.062069 -0.232877 -0.144828 -0.406897 -0.170124  \n",
+       "2 -0.047619 -0.075862 -0.356164 -0.227586 -0.365517 -0.165975  \n",
+       "3 -0.238095 -0.131034 -0.260274 -0.158621 -0.365517 -0.259336  \n",
+       "4 -0.224490 -0.172414 -0.397260 -0.420690 -0.489655 -0.331950  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe)\n",
+    "* Output: readings (dataframe with turbine_id)\n",
+    "* Effect: turbine_id has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 6\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 28,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "      <th>turbine_id</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373788</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373708</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373627</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373556</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373492</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 27 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1         2         3         4         5         6  \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "          7         8         9  ...        17        18        19        20  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.373788 -0.227586 -0.227586 -0.319728   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.373708 -0.186207 -0.117241 -0.115646   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.373627 -0.048276 -0.144828 -0.047619   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.373556 -0.393103 -0.282759 -0.238095   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.373492 -0.365517 -0.282759 -0.224490   \n",
+       "\n",
+       "         21        22        23        24        25  turbine_id  \n",
+       "0 -0.186207 -0.369863 -0.186207 -0.337931 -0.261411        T001  \n",
+       "1 -0.062069 -0.232877 -0.144828 -0.406897 -0.170124        T001  \n",
+       "2 -0.075862 -0.356164 -0.227586 -0.365517 -0.165975        T001  \n",
+       "3 -0.131034 -0.260274 -0.158621 -0.365517 -0.259336        T001  \n",
+       "4 -0.172414 -0.397260 -0.420690 -0.489655 -0.331950        T001  \n",
+       "\n",
+       "[5 rows x 27 columns]"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe with turbine_id)\n",
+    "* Output: readings (dataframe with turbine_id and timestamp)\n",
+    "* Effect: timestamp has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 7\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 28 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1         2         3         4         5         6  \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "          7         8         9  ...        18        19        20        21  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.227586 -0.227586 -0.319728 -0.186207   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.186207 -0.117241 -0.115646 -0.062069   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.048276 -0.144828 -0.047619 -0.075862   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.393103 -0.282759 -0.238095 -0.131034   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.365517 -0.282759 -0.224490 -0.172414   \n",
+       "\n",
+       "         22        23        24        25  turbine_id           timestamp  \n",
+       "0 -0.369863 -0.186207 -0.337931 -0.261411        T001 2013-01-10 00:00:00  \n",
+       "1 -0.232877 -0.144828 -0.406897 -0.170124        T001 2013-01-10 00:10:00  \n",
+       "2 -0.356164 -0.227586 -0.365517 -0.165975        T001 2013-01-10 00:20:00  \n",
+       "3 -0.260274 -0.158621 -0.365517 -0.259336        T001 2013-01-10 00:30:00  \n",
+       "4 -0.397260 -0.420690 -0.489655 -0.331950        T001 2013-01-10 00:40:00  \n",
+       "\n",
+       "[5 rows x 28 columns]"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences\n",
+    "\n",
+    "* Input: X, readings (dataframe with turbine_id and timestamp)\n",
+    "* Output: X\n",
+    "* Effect: X has been converted to a 3d numpy array that contains 1 matrix of shape\n",
+    "  (window_size x num_signals) for each one of the target times."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'window_size': 24, 'cutoff_time': 'cutoff_time', 'time_index': 'timestamp'}"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pipeline._pipeline.get_hyperparameters()[\n",
+    "    'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1']"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 8\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(51121, 28)"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(353,)"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['y'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(353, 24, 26)"
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-0.66002345, -0.57327081, -0.64084507, -0.57796014, -0.6014068 ,\n",
+       "        -0.56103286, -0.55140187, -0.9928135 , -0.99291267, -0.99315058,\n",
+       "        -0.99304288, -0.99346346, -0.99352632, -0.99395333, -0.42553191,\n",
+       "        -0.41772152, -0.58730159, -0.35996294, -0.66896552, -0.57241379,\n",
+       "        -0.61904762, -0.5862069 , -0.60273973, -0.55862069, -0.55862069,\n",
+       "        -0.59751037],\n",
+       "       [-0.2989449 , -0.38569754, -0.48591549, -0.47713951, -0.66705744,\n",
+       "        -0.5915493 , -0.77336449, -0.99278389, -0.9928852 , -0.99312701,\n",
+       "        -0.99301988, -0.9934481 , -0.9935075 , -0.9939459 , -0.39361702,\n",
+       "        -0.40506329, -0.54285714, -0.35992014, -0.40689655, -0.42068966,\n",
+       "        -0.46938776, -0.48965517, -0.67123288, -0.5862069 , -0.83448276,\n",
+       "        -0.5560166 ],\n",
+       "       [-0.33645955, -0.40679953, -0.39906103, -0.38569754, -0.56154748,\n",
+       "        -0.43192488, -0.45560748, -0.99275498, -0.9928584 , -0.99310017,\n",
+       "        -0.99299431, -0.99342739, -0.99348349, -0.99392294, -0.29787234,\n",
+       "        -0.3164557 , -0.49206349, -0.35986854, -0.42068966, -0.43448276,\n",
+       "        -0.40136054, -0.43448276, -0.56164384, -0.47586207, -0.51724138,\n",
+       "        -0.46473029],\n",
+       "       [-0.36928488, -0.41148886, -0.51173709, -0.47010551, -0.54982415,\n",
+       "        -0.48122066, -0.51869159, -0.99272467, -0.9928316 , -0.99307791,\n",
+       "        -0.99297067, -0.99340669, -0.99346079, -0.99390066, -0.29787234,\n",
+       "        -0.35443038, -0.49206349, -0.35981854, -0.39310345, -0.43448276,\n",
+       "        -0.49659864, -0.47586207, -0.56164384, -0.50344828, -0.53103448,\n",
+       "        -0.4813278 ],\n",
+       "       [-0.20750293, -0.35287222, -0.37089202, -0.2989449 , -0.32473623,\n",
+       "        -0.37793427, -0.45794393, -0.99269435, -0.99280347, -0.99305173,\n",
+       "        -0.99294447, -0.9933793 , -0.99343419, -0.9938777 , -0.32978723,\n",
+       "        -0.39240506, -0.49206349, -0.35976314, -0.39310345, -0.40689655,\n",
+       "        -0.41496599, -0.42068966, -0.42465753, -0.42068966, -0.51724138,\n",
+       "        -0.4253112 ],\n",
+       "       [-0.55685815, -0.60375147, -0.64084507, -0.54513482, -0.55685815,\n",
+       "        -0.58215962, -0.63785047, -0.99267179, -0.99278404, -0.99303471,\n",
+       "        -0.99292338, -0.99335793, -0.99341472, -0.99386014, -0.29787234,\n",
+       "        -0.34177215, -0.51746032, -0.35972353, -0.54482759, -0.5862069 ,\n",
+       "        -0.60544218, -0.53103448, -0.54794521, -0.57241379, -0.62758621,\n",
+       "        -0.58921162],\n",
+       "       [-0.66705744, -0.67643611, -0.69014085, -0.64361079, -0.74443142,\n",
+       "        -0.7370892 , -0.7546729 , -0.99265487, -0.99276863, -0.99302096,\n",
+       "        -0.9929074 , -0.99334657, -0.9934024 , -0.99384934, -0.39361702,\n",
+       "        -0.48101266, -0.51746032, -0.35969533, -0.65517241, -0.66896552,\n",
+       "        -0.67346939, -0.64137931, -0.75342466, -0.72413793, -0.76551724,\n",
+       "        -0.70746888],\n",
+       "       [-0.53341149, -0.60375147, -0.63849765, -0.61547479, -0.71395076,\n",
+       "        -0.70187793, -0.72897196, -0.99263231, -0.99275054, -0.99300394,\n",
+       "        -0.99289014, -0.99333255, -0.99338877, -0.9938365 , -0.38297872,\n",
+       "        -0.37974684, -0.54920635, -0.35966173, -0.54482759, -0.6137931 ,\n",
+       "        -0.60544218, -0.6137931 , -0.69863014, -0.69655172, -0.72413793,\n",
+       "        -0.65145228],\n",
+       "       [-0.44196952, -0.4021102 , -0.49295775, -0.49355217, -0.62719812,\n",
+       "        -0.62676056, -0.71728972, -0.99260481, -0.99272173, -0.99298103,\n",
+       "        -0.99286777, -0.99331518, -0.9933719 , -0.99382367, -0.38297872,\n",
+       "        -0.4556962 , -0.54285714, -0.35961793, -0.44827586, -0.39310345,\n",
+       "        -0.4829932 , -0.50344828, -0.63013699, -0.62758621, -0.72413793,\n",
+       "        -0.54564315],\n",
+       "       [-0.46307151, -0.38100821, -0.35446009, -0.44900352, -0.50293083,\n",
+       "        -0.4741784 , -0.63317757, -0.99257731, -0.99269226, -0.99295157,\n",
+       "        -0.99284285, -0.99329247, -0.9933479 , -0.99380612, -0.28723404,\n",
+       "        -0.3164557 , -0.47301587, -0.35956633, -0.44827586, -0.37931034,\n",
+       "        -0.34693878, -0.44827586, -0.52054795, -0.47586207, -0.62758621,\n",
+       "        -0.46473029],\n",
+       "       [-0.26611958, -0.26611958, -0.29107981, -0.34349355, -0.3950762 ,\n",
+       "        -0.29577465, -0.43925234, -0.9925477 , -0.99266278, -0.99292211,\n",
+       "        -0.99281601, -0.99326575, -0.99331805, -0.99378316, -0.28723404,\n",
+       "        -0.39240506, -0.46031746, -0.35950873, -0.40689655, -0.37931034,\n",
+       "        -0.34693878, -0.40689655, -0.43835616, -0.35172414, -0.51724138,\n",
+       "        -0.40248963],\n",
+       "       [-0.46307151, -0.35990621, -0.43192488, -0.36928488, -0.47245018,\n",
+       "        -0.44600939, -0.41121495, -0.99252091, -0.9926333 , -0.99289592,\n",
+       "        -0.99278789, -0.99324104, -0.99329275, -0.99375547, -0.28723404,\n",
+       "        -0.43037975, -0.46666667, -0.35945292, -0.46206897, -0.37931034,\n",
+       "        -0.41496599, -0.37931034, -0.47945205, -0.44827586, -0.42068966,\n",
+       "        -0.42116183],\n",
+       "       [-0.44431419, -0.4021102 , -0.38732394, -0.3059789 , -0.35990621,\n",
+       "        -0.28403756, -0.40420561, -0.99249341, -0.99260583, -0.99287039,\n",
+       "        -0.99275913, -0.99321298, -0.99326226, -0.99372846, -0.30851064,\n",
+       "        -0.4556962 , -0.46031746, -0.35939572, -0.44827586, -0.42068966,\n",
+       "        -0.42857143, -0.36551724, -0.4109589 , -0.33793103, -0.43448276,\n",
+       "        -0.406639  ],\n",
+       "       [-0.43962485, -0.36459555, -0.35211268, -0.35052755, -0.44665885,\n",
+       "        -0.34741784, -0.44859813, -0.99246592, -0.99257703, -0.99284028,\n",
+       "        -0.99273037, -0.99318693, -0.99323176, -0.99370279, -0.28723404,\n",
+       "        -0.36708861, -0.48571429, -0.35933712, -0.44827586, -0.39310345,\n",
+       "        -0.33333333, -0.36551724, -0.45205479, -0.33793103, -0.46206897,\n",
+       "        -0.39211618],\n",
+       "       [-0.2028136 , -0.25439625, -0.30751174, -0.3130129 , -0.37631887,\n",
+       "        -0.3685446 , -0.46495327, -0.99243067, -0.99254152, -0.9928082 ,\n",
+       "        -0.99269906, -0.99315821, -0.99320322, -0.99367781, -0.27659574,\n",
+       "        -0.32911392, -0.47301587, -0.35927332, -0.29655172, -0.25517241,\n",
+       "        -0.29251701, -0.31034483, -0.39726027, -0.37931034, -0.47586207,\n",
+       "        -0.33817427],\n",
+       "       [-0.23329426, -0.27080891, -0.31924883, -0.24736225, -0.35521688,\n",
+       "        -0.33098592, -0.4182243 , -0.99239753, -0.99250668, -0.99277743,\n",
+       "        -0.99266518, -0.99312815, -0.99317272, -0.99365012, -0.26595745,\n",
+       "        -0.40506329, -0.46666667, -0.35920811, -0.33793103, -0.26896552,\n",
+       "        -0.31972789, -0.25517241, -0.36986301, -0.33793103, -0.42068966,\n",
+       "        -0.32365145],\n",
+       "       [-0.12778429, -0.11137163, -0.10798122, -0.05275498, -0.25439625,\n",
+       "        -0.23474178, -0.28271028, -0.99236228, -0.99247117, -0.99274143,\n",
+       "        -0.99263131, -0.99309876, -0.99314028, -0.99362108, -0.24468085,\n",
+       "        -0.32911392, -0.43492063, -0.35914011, -0.29655172, -0.25517241,\n",
+       "        -0.21088435, -0.25517241, -0.38356164, -0.29655172, -0.39310345,\n",
+       "        -0.29460581],\n",
+       "       [-0.14185229, -0.2028136 , -0.31690141, -0.17467761, -0.24970692,\n",
+       "        -0.25117371, -0.37383178, -0.9923242 , -0.99243567, -0.99271066,\n",
+       "        -0.9925968 , -0.9930667 , -0.99310849, -0.99359204, -0.22340426,\n",
+       "        -0.3164557 , -0.41587302, -0.35907171, -0.24137931, -0.25517241,\n",
+       "        -0.31972789, -0.24137931, -0.32876712, -0.31034483, -0.39310345,\n",
+       "        -0.29045643],\n",
+       "       [-0.4021102 , -0.32708089, -0.33802817, -0.28018757, -0.3950762 ,\n",
+       "        -0.40140845, -0.48364486, -0.99229459, -0.99240284, -0.99268055,\n",
+       "        -0.99256421, -0.99303731, -0.99308059, -0.99356773, -0.25531915,\n",
+       "        -0.29113924, -0.40952381, -0.35901131, -0.40689655, -0.31034483,\n",
+       "        -0.33333333, -0.28275862, -0.38356164, -0.39310345, -0.48965517,\n",
+       "        -0.37344398],\n",
+       "       [-0.27549824, -0.3059789 , -0.37089202, -0.20046893, -0.34818288,\n",
+       "        -0.33802817, -0.42056075, -0.99225863, -0.99237068, -0.99265109,\n",
+       "        -0.99252778, -0.99300725, -0.99305075, -0.99354072, -0.28723404,\n",
+       "        -0.41772152, -0.48571429, -0.3589459 , -0.28275862, -0.32413793,\n",
+       "        -0.34693878, -0.2       , -0.36986301, -0.35172414, -0.43448276,\n",
+       "        -0.32157676],\n",
+       "       [-0.30832356, -0.3059789 , -0.3286385 , -0.31066823, -0.32473623,\n",
+       "        -0.34741784, -0.38785047, -0.99222479, -0.99233786, -0.99262032,\n",
+       "        -0.9924971 , -0.99297519, -0.9930209 , -0.99351168, -0.28723404,\n",
+       "        -0.3164557 , -0.47936508, -0.3588813 , -0.32413793, -0.31034483,\n",
+       "        -0.31972789, -0.32413793, -0.32876712, -0.35172414, -0.39310345,\n",
+       "        -0.32987552],\n",
+       "       [-0.33645955, -0.2098476 , -0.24413146, -0.2919109 , -0.41383353,\n",
+       "        -0.41079812, -0.46495327, -0.99219025, -0.99230168, -0.99258563,\n",
+       "        -0.99246579, -0.99294781, -0.99299365, -0.9934867 , -0.24468085,\n",
+       "        -0.29113924, -0.42857143, -0.3588177 , -0.31034483, -0.24137931,\n",
+       "        -0.23809524, -0.31034483, -0.42465753, -0.40689655, -0.47586207,\n",
+       "        -0.34024896],\n",
+       "       [-0.24267292, -0.15357562, -0.19248826, -0.13950762, -0.35052755,\n",
+       "        -0.30046948, -0.37616822, -0.99215358, -0.99226215, -0.99254831,\n",
+       "        -0.99242872, -0.99291708, -0.99296121, -0.99345766, -0.22340426,\n",
+       "        -0.25316456, -0.42857143, -0.3587457 , -0.26896552, -0.17241379,\n",
+       "        -0.18367347, -0.1862069 , -0.35616438, -0.29655172, -0.39310345,\n",
+       "        -0.25311203],\n",
+       "       [-0.2989449 , -0.26377491, -0.27699531, -0.15592028, -0.34583822,\n",
+       "        -0.34976526, -0.48831776, -0.99211763, -0.99222731, -0.99251493,\n",
+       "        -0.99239038, -0.99288636, -0.99293072, -0.99343267, -0.20212766,\n",
+       "        -0.24050633, -0.3968254 , -0.35867929, -0.28275862, -0.26896552,\n",
+       "        -0.26530612, -0.15862069, -0.35616438, -0.33793103, -0.47586207,\n",
+       "        -0.31120332]])"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'][0]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## keras.Sequential.DoubleLSTMTimeSeriesClassifier\n",
+    "\n",
+    "* Input: X, y\n",
+    "* Output: \n",
+    "* Effect: DoubleLSTM has been fitted."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2022-01-18 05:32:48.464559: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
+      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+      "2022-01-18 05:32:48.495873: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fba31d9b0c0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
+      "2022-01-18 05:32:48.495892: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version\n"
+     ]
+    }
+   ],
+   "source": [
+    "step = 9\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/tutorials/pipelines/lstm_regressor_with_unstack.ipynb b/tutorials/pipelines/lstm_regressor_with_unstack.ipynb
new file mode 100644
index 0000000..516c6da
--- /dev/null
+++ b/tutorials/pipelines/lstm_regressor_with_unstack.ipynb
@@ -0,0 +1,2499 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "488d2ccc",
+   "metadata": {},
+   "source": [
+    "# lstm_regressor_with_unstack"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "caf9a9ef",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.demo import load_demo\n",
+    "\n",
+    "train_target_times, test_target_times, readings = load_demo()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "80315927",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pipeline_name = 'lstm_regressor_with_unstack'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "1073a88a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco import DracoPipeline\n",
+    "\n",
+    "pipeline = DracoPipeline(pipeline_name)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "1c6cb15d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pipeline.template['primitives']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "26bbb52d",
+   "metadata": {},
+   "source": [
+    "# Step by Step execution"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3f12ee16",
+   "metadata": {},
+   "source": [
+    "## Input Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "a2396b1c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>signal_id</th>\n",
+       "      <th>value</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:10:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0007</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:20:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>0.0019</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:30:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0043</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:40:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>0.0007</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:50:00</td>\n",
+       "      <td>operational setting 1</td>\n",
+       "      <td>-0.0019</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id           timestamp              signal_id   value\n",
+       "0           1 2013-01-12 00:10:00  operational setting 1 -0.0007\n",
+       "1           1 2013-01-12 00:20:00  operational setting 1  0.0019\n",
+       "2           1 2013-01-12 00:30:00  operational setting 1 -0.0043\n",
+       "3           1 2013-01-12 00:40:00  operational setting 1  0.0007\n",
+       "4           1 2013-01-12 00:50:00  operational setting 1 -0.0019"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "id": "3cd80f1f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:20:00</td>\n",
+       "      <td>166</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:30:00</td>\n",
+       "      <td>165</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:40:00</td>\n",
+       "      <td>164</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 04:50:00</td>\n",
+       "      <td>163</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 05:00:00</td>\n",
+       "      <td>162</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id         cutoff_time  target\n",
+       "0           1 2013-01-12 04:20:00     166\n",
+       "1           1 2013-01-12 04:30:00     165\n",
+       "2           1 2013-01-12 04:40:00     164\n",
+       "3           1 2013-01-12 04:50:00     163\n",
+       "4           1 2013-01-12 05:00:00     162"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train_target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "id": "6a759b57",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-13 13:10:00</td>\n",
+       "      <td>112.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2</td>\n",
+       "      <td>2013-01-14 08:00:00</td>\n",
+       "      <td>98.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>3</td>\n",
+       "      <td>2013-01-14 02:50:00</td>\n",
+       "      <td>69.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>4</td>\n",
+       "      <td>2013-01-14 01:10:00</td>\n",
+       "      <td>82.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>5</td>\n",
+       "      <td>2013-01-14 13:10:00</td>\n",
+       "      <td>91.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id         cutoff_time  target\n",
+       "0           1 2013-01-13 13:10:00   112.0\n",
+       "1           2 2013-01-14 08:00:00    98.0\n",
+       "2           3 2013-01-14 02:50:00    69.0\n",
+       "3           4 2013-01-14 01:10:00    82.0\n",
+       "4           5 2013-01-14 13:10:00    91.0"
+      ]
+     },
+     "execution_count": 40,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test_target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "feb3daa6",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "training shape (18131, 3)\n",
+      "testing shape (100, 3)\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"training shape\", train_target_times.shape)\n",
+    "print(\"testing shape\", test_target_times.shape)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a956f746",
+   "metadata": {},
+   "source": [
+    "## Data Preparation (part of Draco Pipeline)\n",
+    "\n",
+    "* Input: target_times, readings, turbines\n",
+    "* Output: X, y, readings, turbines\n",
+    "* Effect: target_times has been split into X and y"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a813a966",
+   "metadata": {},
+   "source": [
+    "## mlblocks.MLPipeline\n",
+    "\n",
+    "### pandas.DataFrame.resample\n",
+    "\n",
+    "* Input: readings\n",
+    "* Output: readings (resampled)\n",
+    "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
+    "  signal_id and timestamp have been set as a multi-index\n",
+    "  \n",
+    "### pandas.DataFrame.unstack\n",
+    "\n",
+    "* Input: readings (resampled)\n",
+    "* Output: readings (unstacked)\n",
+    "* Effect: readings have been unstacked"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "bb00b3b8",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "context = pipeline.fit(train_target_times, readings, output_=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "381e361d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "b41f13c1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_operational setting 1</th>\n",
+       "      <th>value_operational setting 2</th>\n",
+       "      <th>value_operational setting 3</th>\n",
+       "      <th>value_sensor measurement 1</th>\n",
+       "      <th>value_sensor measurement 10</th>\n",
+       "      <th>value_sensor measurement 11</th>\n",
+       "      <th>value_sensor measurement 12</th>\n",
+       "      <th>value_sensor measurement 13</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_sensor measurement 2</th>\n",
+       "      <th>value_sensor measurement 20</th>\n",
+       "      <th>value_sensor measurement 21</th>\n",
+       "      <th>value_sensor measurement 3</th>\n",
+       "      <th>value_sensor measurement 4</th>\n",
+       "      <th>value_sensor measurement 5</th>\n",
+       "      <th>value_sensor measurement 6</th>\n",
+       "      <th>value_sensor measurement 7</th>\n",
+       "      <th>value_sensor measurement 8</th>\n",
+       "      <th>value_sensor measurement 9</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:10:00</td>\n",
+       "      <td>-0.0007</td>\n",
+       "      <td>-0.0004</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.47</td>\n",
+       "      <td>521.66</td>\n",
+       "      <td>2388.02</td>\n",
+       "      <td>...</td>\n",
+       "      <td>641.82</td>\n",
+       "      <td>39.06</td>\n",
+       "      <td>23.4190</td>\n",
+       "      <td>1589.70</td>\n",
+       "      <td>1400.60</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.36</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9046.19</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:20:00</td>\n",
+       "      <td>0.0019</td>\n",
+       "      <td>-0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.49</td>\n",
+       "      <td>522.28</td>\n",
+       "      <td>2388.07</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.15</td>\n",
+       "      <td>39.00</td>\n",
+       "      <td>23.4236</td>\n",
+       "      <td>1591.82</td>\n",
+       "      <td>1403.14</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>553.75</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>9044.07</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:30:00</td>\n",
+       "      <td>-0.0043</td>\n",
+       "      <td>0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.27</td>\n",
+       "      <td>522.42</td>\n",
+       "      <td>2388.03</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.95</td>\n",
+       "      <td>23.3442</td>\n",
+       "      <td>1587.99</td>\n",
+       "      <td>1404.20</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.26</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>9052.94</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:40:00</td>\n",
+       "      <td>0.0007</td>\n",
+       "      <td>0.0000</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.13</td>\n",
+       "      <td>522.86</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.88</td>\n",
+       "      <td>23.3739</td>\n",
+       "      <td>1582.79</td>\n",
+       "      <td>1401.87</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.45</td>\n",
+       "      <td>2388.11</td>\n",
+       "      <td>9049.48</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:50:00</td>\n",
+       "      <td>-0.0019</td>\n",
+       "      <td>-0.0002</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.28</td>\n",
+       "      <td>522.19</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.37</td>\n",
+       "      <td>38.90</td>\n",
+       "      <td>23.4044</td>\n",
+       "      <td>1582.85</td>\n",
+       "      <td>1406.22</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.00</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9055.15</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   turbine_id           timestamp  value_operational setting 1  \\\n",
+       "0           1 2013-01-12 00:10:00                      -0.0007   \n",
+       "1           1 2013-01-12 00:20:00                       0.0019   \n",
+       "2           1 2013-01-12 00:30:00                      -0.0043   \n",
+       "3           1 2013-01-12 00:40:00                       0.0007   \n",
+       "4           1 2013-01-12 00:50:00                      -0.0019   \n",
+       "\n",
+       "   value_operational setting 2  value_operational setting 3  \\\n",
+       "0                      -0.0004                        100.0   \n",
+       "1                      -0.0003                        100.0   \n",
+       "2                       0.0003                        100.0   \n",
+       "3                       0.0000                        100.0   \n",
+       "4                      -0.0002                        100.0   \n",
+       "\n",
+       "   value_sensor measurement 1  value_sensor measurement 10  \\\n",
+       "0                      518.67                          1.3   \n",
+       "1                      518.67                          1.3   \n",
+       "2                      518.67                          1.3   \n",
+       "3                      518.67                          1.3   \n",
+       "4                      518.67                          1.3   \n",
+       "\n",
+       "   value_sensor measurement 11  value_sensor measurement 12  \\\n",
+       "0                        47.47                       521.66   \n",
+       "1                        47.49                       522.28   \n",
+       "2                        47.27                       522.42   \n",
+       "3                        47.13                       522.86   \n",
+       "4                        47.28                       522.19   \n",
+       "\n",
+       "   value_sensor measurement 13  ...  value_sensor measurement 2  \\\n",
+       "0                      2388.02  ...                      641.82   \n",
+       "1                      2388.07  ...                      642.15   \n",
+       "2                      2388.03  ...                      642.35   \n",
+       "3                      2388.08  ...                      642.35   \n",
+       "4                      2388.04  ...                      642.37   \n",
+       "\n",
+       "   value_sensor measurement 20  value_sensor measurement 21  \\\n",
+       "0                        39.06                      23.4190   \n",
+       "1                        39.00                      23.4236   \n",
+       "2                        38.95                      23.3442   \n",
+       "3                        38.88                      23.3739   \n",
+       "4                        38.90                      23.4044   \n",
+       "\n",
+       "   value_sensor measurement 3  value_sensor measurement 4  \\\n",
+       "0                     1589.70                     1400.60   \n",
+       "1                     1591.82                     1403.14   \n",
+       "2                     1587.99                     1404.20   \n",
+       "3                     1582.79                     1401.87   \n",
+       "4                     1582.85                     1406.22   \n",
+       "\n",
+       "   value_sensor measurement 5  value_sensor measurement 6  \\\n",
+       "0                       14.62                       21.61   \n",
+       "1                       14.62                       21.61   \n",
+       "2                       14.62                       21.61   \n",
+       "3                       14.62                       21.61   \n",
+       "4                       14.62                       21.61   \n",
+       "\n",
+       "   value_sensor measurement 7  value_sensor measurement 8  \\\n",
+       "0                      554.36                     2388.06   \n",
+       "1                      553.75                     2388.04   \n",
+       "2                      554.26                     2388.08   \n",
+       "3                      554.45                     2388.11   \n",
+       "4                      554.00                     2388.06   \n",
+       "\n",
+       "   value_sensor measurement 9  \n",
+       "0                     9046.19  \n",
+       "1                     9044.07  \n",
+       "2                     9052.94  \n",
+       "3                     9049.48  \n",
+       "4                     9055.15  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5f521fd3",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (unstacked)\n",
+    "* Output: readings (without turbine_id), turbine_id\n",
+    "* Effect: turbine_id has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "bb0bac75",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 1\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "1009407e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y', 'turbine_id'])"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "93104c3b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0    1\n",
+       "1    1\n",
+       "2    1\n",
+       "3    1\n",
+       "4    1\n",
+       "Name: turbine_id, dtype: int64"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['turbine_id'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "83855579",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_operational setting 1</th>\n",
+       "      <th>value_operational setting 2</th>\n",
+       "      <th>value_operational setting 3</th>\n",
+       "      <th>value_sensor measurement 1</th>\n",
+       "      <th>value_sensor measurement 10</th>\n",
+       "      <th>value_sensor measurement 11</th>\n",
+       "      <th>value_sensor measurement 12</th>\n",
+       "      <th>value_sensor measurement 13</th>\n",
+       "      <th>value_sensor measurement 14</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_sensor measurement 2</th>\n",
+       "      <th>value_sensor measurement 20</th>\n",
+       "      <th>value_sensor measurement 21</th>\n",
+       "      <th>value_sensor measurement 3</th>\n",
+       "      <th>value_sensor measurement 4</th>\n",
+       "      <th>value_sensor measurement 5</th>\n",
+       "      <th>value_sensor measurement 6</th>\n",
+       "      <th>value_sensor measurement 7</th>\n",
+       "      <th>value_sensor measurement 8</th>\n",
+       "      <th>value_sensor measurement 9</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2013-01-12 00:10:00</td>\n",
+       "      <td>-0.0007</td>\n",
+       "      <td>-0.0004</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.47</td>\n",
+       "      <td>521.66</td>\n",
+       "      <td>2388.02</td>\n",
+       "      <td>8138.62</td>\n",
+       "      <td>...</td>\n",
+       "      <td>641.82</td>\n",
+       "      <td>39.06</td>\n",
+       "      <td>23.4190</td>\n",
+       "      <td>1589.70</td>\n",
+       "      <td>1400.60</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.36</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9046.19</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2013-01-12 00:20:00</td>\n",
+       "      <td>0.0019</td>\n",
+       "      <td>-0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.49</td>\n",
+       "      <td>522.28</td>\n",
+       "      <td>2388.07</td>\n",
+       "      <td>8131.49</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.15</td>\n",
+       "      <td>39.00</td>\n",
+       "      <td>23.4236</td>\n",
+       "      <td>1591.82</td>\n",
+       "      <td>1403.14</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>553.75</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>9044.07</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2013-01-12 00:30:00</td>\n",
+       "      <td>-0.0043</td>\n",
+       "      <td>0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.27</td>\n",
+       "      <td>522.42</td>\n",
+       "      <td>2388.03</td>\n",
+       "      <td>8133.23</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.95</td>\n",
+       "      <td>23.3442</td>\n",
+       "      <td>1587.99</td>\n",
+       "      <td>1404.20</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.26</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>9052.94</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>2013-01-12 00:40:00</td>\n",
+       "      <td>0.0007</td>\n",
+       "      <td>0.0000</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.13</td>\n",
+       "      <td>522.86</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>8133.83</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.88</td>\n",
+       "      <td>23.3739</td>\n",
+       "      <td>1582.79</td>\n",
+       "      <td>1401.87</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.45</td>\n",
+       "      <td>2388.11</td>\n",
+       "      <td>9049.48</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>2013-01-12 00:50:00</td>\n",
+       "      <td>-0.0019</td>\n",
+       "      <td>-0.0002</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.28</td>\n",
+       "      <td>522.19</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>8133.80</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.37</td>\n",
+       "      <td>38.90</td>\n",
+       "      <td>23.4044</td>\n",
+       "      <td>1582.85</td>\n",
+       "      <td>1406.22</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.00</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9055.15</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 25 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "            timestamp  value_operational setting 1  \\\n",
+       "0 2013-01-12 00:10:00                      -0.0007   \n",
+       "1 2013-01-12 00:20:00                       0.0019   \n",
+       "2 2013-01-12 00:30:00                      -0.0043   \n",
+       "3 2013-01-12 00:40:00                       0.0007   \n",
+       "4 2013-01-12 00:50:00                      -0.0019   \n",
+       "\n",
+       "   value_operational setting 2  value_operational setting 3  \\\n",
+       "0                      -0.0004                        100.0   \n",
+       "1                      -0.0003                        100.0   \n",
+       "2                       0.0003                        100.0   \n",
+       "3                       0.0000                        100.0   \n",
+       "4                      -0.0002                        100.0   \n",
+       "\n",
+       "   value_sensor measurement 1  value_sensor measurement 10  \\\n",
+       "0                      518.67                          1.3   \n",
+       "1                      518.67                          1.3   \n",
+       "2                      518.67                          1.3   \n",
+       "3                      518.67                          1.3   \n",
+       "4                      518.67                          1.3   \n",
+       "\n",
+       "   value_sensor measurement 11  value_sensor measurement 12  \\\n",
+       "0                        47.47                       521.66   \n",
+       "1                        47.49                       522.28   \n",
+       "2                        47.27                       522.42   \n",
+       "3                        47.13                       522.86   \n",
+       "4                        47.28                       522.19   \n",
+       "\n",
+       "   value_sensor measurement 13  value_sensor measurement 14  ...  \\\n",
+       "0                      2388.02                      8138.62  ...   \n",
+       "1                      2388.07                      8131.49  ...   \n",
+       "2                      2388.03                      8133.23  ...   \n",
+       "3                      2388.08                      8133.83  ...   \n",
+       "4                      2388.04                      8133.80  ...   \n",
+       "\n",
+       "   value_sensor measurement 2  value_sensor measurement 20  \\\n",
+       "0                      641.82                        39.06   \n",
+       "1                      642.15                        39.00   \n",
+       "2                      642.35                        38.95   \n",
+       "3                      642.35                        38.88   \n",
+       "4                      642.37                        38.90   \n",
+       "\n",
+       "   value_sensor measurement 21  value_sensor measurement 3  \\\n",
+       "0                      23.4190                     1589.70   \n",
+       "1                      23.4236                     1591.82   \n",
+       "2                      23.3442                     1587.99   \n",
+       "3                      23.3739                     1582.79   \n",
+       "4                      23.4044                     1582.85   \n",
+       "\n",
+       "   value_sensor measurement 4  value_sensor measurement 5  \\\n",
+       "0                     1400.60                       14.62   \n",
+       "1                     1403.14                       14.62   \n",
+       "2                     1404.20                       14.62   \n",
+       "3                     1401.87                       14.62   \n",
+       "4                     1406.22                       14.62   \n",
+       "\n",
+       "   value_sensor measurement 6  value_sensor measurement 7  \\\n",
+       "0                       21.61                      554.36   \n",
+       "1                       21.61                      553.75   \n",
+       "2                       21.61                      554.26   \n",
+       "3                       21.61                      554.45   \n",
+       "4                       21.61                      554.00   \n",
+       "\n",
+       "   value_sensor measurement 8  value_sensor measurement 9  \n",
+       "0                     2388.06                     9046.19  \n",
+       "1                     2388.04                     9044.07  \n",
+       "2                     2388.08                     9052.94  \n",
+       "3                     2388.11                     9049.48  \n",
+       "4                     2388.06                     9055.15  \n",
+       "\n",
+       "[5 rows x 25 columns]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a43ffbb1",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (without turbine_id)\n",
+    "* Output: readings (without timestamp), timestamp\n",
+    "* Effect: timestamp has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "ebcad5cd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 2\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "d497ab07",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'X', 'y', 'timestamp'])"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "2c3bfa0b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0   2013-01-12 00:10:00\n",
+       "1   2013-01-12 00:20:00\n",
+       "2   2013-01-12 00:30:00\n",
+       "3   2013-01-12 00:40:00\n",
+       "4   2013-01-12 00:50:00\n",
+       "Name: timestamp, dtype: datetime64[ns]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['timestamp'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "3c837b44",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>value_operational setting 1</th>\n",
+       "      <th>value_operational setting 2</th>\n",
+       "      <th>value_operational setting 3</th>\n",
+       "      <th>value_sensor measurement 1</th>\n",
+       "      <th>value_sensor measurement 10</th>\n",
+       "      <th>value_sensor measurement 11</th>\n",
+       "      <th>value_sensor measurement 12</th>\n",
+       "      <th>value_sensor measurement 13</th>\n",
+       "      <th>value_sensor measurement 14</th>\n",
+       "      <th>value_sensor measurement 15</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_sensor measurement 2</th>\n",
+       "      <th>value_sensor measurement 20</th>\n",
+       "      <th>value_sensor measurement 21</th>\n",
+       "      <th>value_sensor measurement 3</th>\n",
+       "      <th>value_sensor measurement 4</th>\n",
+       "      <th>value_sensor measurement 5</th>\n",
+       "      <th>value_sensor measurement 6</th>\n",
+       "      <th>value_sensor measurement 7</th>\n",
+       "      <th>value_sensor measurement 8</th>\n",
+       "      <th>value_sensor measurement 9</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.0007</td>\n",
+       "      <td>-0.0004</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.47</td>\n",
+       "      <td>521.66</td>\n",
+       "      <td>2388.02</td>\n",
+       "      <td>8138.62</td>\n",
+       "      <td>8.4195</td>\n",
+       "      <td>...</td>\n",
+       "      <td>641.82</td>\n",
+       "      <td>39.06</td>\n",
+       "      <td>23.4190</td>\n",
+       "      <td>1589.70</td>\n",
+       "      <td>1400.60</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.36</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9046.19</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0.0019</td>\n",
+       "      <td>-0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.49</td>\n",
+       "      <td>522.28</td>\n",
+       "      <td>2388.07</td>\n",
+       "      <td>8131.49</td>\n",
+       "      <td>8.4318</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.15</td>\n",
+       "      <td>39.00</td>\n",
+       "      <td>23.4236</td>\n",
+       "      <td>1591.82</td>\n",
+       "      <td>1403.14</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>553.75</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>9044.07</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.0043</td>\n",
+       "      <td>0.0003</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.27</td>\n",
+       "      <td>522.42</td>\n",
+       "      <td>2388.03</td>\n",
+       "      <td>8133.23</td>\n",
+       "      <td>8.4178</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.95</td>\n",
+       "      <td>23.3442</td>\n",
+       "      <td>1587.99</td>\n",
+       "      <td>1404.20</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.26</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>9052.94</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0.0007</td>\n",
+       "      <td>0.0000</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.13</td>\n",
+       "      <td>522.86</td>\n",
+       "      <td>2388.08</td>\n",
+       "      <td>8133.83</td>\n",
+       "      <td>8.3682</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.35</td>\n",
+       "      <td>38.88</td>\n",
+       "      <td>23.3739</td>\n",
+       "      <td>1582.79</td>\n",
+       "      <td>1401.87</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.45</td>\n",
+       "      <td>2388.11</td>\n",
+       "      <td>9049.48</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.0019</td>\n",
+       "      <td>-0.0002</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>518.67</td>\n",
+       "      <td>1.3</td>\n",
+       "      <td>47.28</td>\n",
+       "      <td>522.19</td>\n",
+       "      <td>2388.04</td>\n",
+       "      <td>8133.80</td>\n",
+       "      <td>8.4294</td>\n",
+       "      <td>...</td>\n",
+       "      <td>642.37</td>\n",
+       "      <td>38.90</td>\n",
+       "      <td>23.4044</td>\n",
+       "      <td>1582.85</td>\n",
+       "      <td>1406.22</td>\n",
+       "      <td>14.62</td>\n",
+       "      <td>21.61</td>\n",
+       "      <td>554.00</td>\n",
+       "      <td>2388.06</td>\n",
+       "      <td>9055.15</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 24 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   value_operational setting 1  value_operational setting 2  \\\n",
+       "0                      -0.0007                      -0.0004   \n",
+       "1                       0.0019                      -0.0003   \n",
+       "2                      -0.0043                       0.0003   \n",
+       "3                       0.0007                       0.0000   \n",
+       "4                      -0.0019                      -0.0002   \n",
+       "\n",
+       "   value_operational setting 3  value_sensor measurement 1  \\\n",
+       "0                        100.0                      518.67   \n",
+       "1                        100.0                      518.67   \n",
+       "2                        100.0                      518.67   \n",
+       "3                        100.0                      518.67   \n",
+       "4                        100.0                      518.67   \n",
+       "\n",
+       "   value_sensor measurement 10  value_sensor measurement 11  \\\n",
+       "0                          1.3                        47.47   \n",
+       "1                          1.3                        47.49   \n",
+       "2                          1.3                        47.27   \n",
+       "3                          1.3                        47.13   \n",
+       "4                          1.3                        47.28   \n",
+       "\n",
+       "   value_sensor measurement 12  value_sensor measurement 13  \\\n",
+       "0                       521.66                      2388.02   \n",
+       "1                       522.28                      2388.07   \n",
+       "2                       522.42                      2388.03   \n",
+       "3                       522.86                      2388.08   \n",
+       "4                       522.19                      2388.04   \n",
+       "\n",
+       "   value_sensor measurement 14  value_sensor measurement 15  ...  \\\n",
+       "0                      8138.62                       8.4195  ...   \n",
+       "1                      8131.49                       8.4318  ...   \n",
+       "2                      8133.23                       8.4178  ...   \n",
+       "3                      8133.83                       8.3682  ...   \n",
+       "4                      8133.80                       8.4294  ...   \n",
+       "\n",
+       "   value_sensor measurement 2  value_sensor measurement 20  \\\n",
+       "0                      641.82                        39.06   \n",
+       "1                      642.15                        39.00   \n",
+       "2                      642.35                        38.95   \n",
+       "3                      642.35                        38.88   \n",
+       "4                      642.37                        38.90   \n",
+       "\n",
+       "   value_sensor measurement 21  value_sensor measurement 3  \\\n",
+       "0                      23.4190                     1589.70   \n",
+       "1                      23.4236                     1591.82   \n",
+       "2                      23.3442                     1587.99   \n",
+       "3                      23.3739                     1582.79   \n",
+       "4                      23.4044                     1582.85   \n",
+       "\n",
+       "   value_sensor measurement 4  value_sensor measurement 5  \\\n",
+       "0                     1400.60                       14.62   \n",
+       "1                     1403.14                       14.62   \n",
+       "2                     1404.20                       14.62   \n",
+       "3                     1401.87                       14.62   \n",
+       "4                     1406.22                       14.62   \n",
+       "\n",
+       "   value_sensor measurement 6  value_sensor measurement 7  \\\n",
+       "0                       21.61                      554.36   \n",
+       "1                       21.61                      553.75   \n",
+       "2                       21.61                      554.26   \n",
+       "3                       21.61                      554.45   \n",
+       "4                       21.61                      554.00   \n",
+       "\n",
+       "   value_sensor measurement 8  value_sensor measurement 9  \n",
+       "0                     2388.06                     9046.19  \n",
+       "1                     2388.04                     9044.07  \n",
+       "2                     2388.08                     9052.94  \n",
+       "3                     2388.11                     9049.48  \n",
+       "4                     2388.06                     9055.15  \n",
+       "\n",
+       "[5 rows x 24 columns]"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "78cc4b36",
+   "metadata": {},
+   "source": [
+    "## sklearn.impute.SimpleImputer\n",
+    "\n",
+    "* Input: readings (unstacked, no turbine_id, no timestamp)\n",
+    "* Output: readings (imputed, numpy array)\n",
+    "* Effect: readings have been imputed and converted to numpy array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "3ad08e01",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 3\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "19c4ee50",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "af5f9dc1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-7.00000e-04, -4.00000e-04,  1.00000e+02,  5.18670e+02,\n",
+       "         1.30000e+00,  4.74700e+01,  5.21660e+02,  2.38802e+03,\n",
+       "         8.13862e+03,  8.41950e+00,  3.00000e-02,  3.92000e+02,\n",
+       "         2.38800e+03,  1.00000e+02,  6.41820e+02,  3.90600e+01,\n",
+       "         2.34190e+01,  1.58970e+03,  1.40060e+03,  1.46200e+01,\n",
+       "         2.16100e+01,  5.54360e+02,  2.38806e+03,  9.04619e+03],\n",
+       "       [ 1.90000e-03, -3.00000e-04,  1.00000e+02,  5.18670e+02,\n",
+       "         1.30000e+00,  4.74900e+01,  5.22280e+02,  2.38807e+03,\n",
+       "         8.13149e+03,  8.43180e+00,  3.00000e-02,  3.92000e+02,\n",
+       "         2.38800e+03,  1.00000e+02,  6.42150e+02,  3.90000e+01,\n",
+       "         2.34236e+01,  1.59182e+03,  1.40314e+03,  1.46200e+01,\n",
+       "         2.16100e+01,  5.53750e+02,  2.38804e+03,  9.04407e+03],\n",
+       "       [-4.30000e-03,  3.00000e-04,  1.00000e+02,  5.18670e+02,\n",
+       "         1.30000e+00,  4.72700e+01,  5.22420e+02,  2.38803e+03,\n",
+       "         8.13323e+03,  8.41780e+00,  3.00000e-02,  3.90000e+02,\n",
+       "         2.38800e+03,  1.00000e+02,  6.42350e+02,  3.89500e+01,\n",
+       "         2.33442e+01,  1.58799e+03,  1.40420e+03,  1.46200e+01,\n",
+       "         2.16100e+01,  5.54260e+02,  2.38808e+03,  9.05294e+03],\n",
+       "       [ 7.00000e-04,  0.00000e+00,  1.00000e+02,  5.18670e+02,\n",
+       "         1.30000e+00,  4.71300e+01,  5.22860e+02,  2.38808e+03,\n",
+       "         8.13383e+03,  8.36820e+00,  3.00000e-02,  3.92000e+02,\n",
+       "         2.38800e+03,  1.00000e+02,  6.42350e+02,  3.88800e+01,\n",
+       "         2.33739e+01,  1.58279e+03,  1.40187e+03,  1.46200e+01,\n",
+       "         2.16100e+01,  5.54450e+02,  2.38811e+03,  9.04948e+03],\n",
+       "       [-1.90000e-03, -2.00000e-04,  1.00000e+02,  5.18670e+02,\n",
+       "         1.30000e+00,  4.72800e+01,  5.22190e+02,  2.38804e+03,\n",
+       "         8.13380e+03,  8.42940e+00,  3.00000e-02,  3.93000e+02,\n",
+       "         2.38800e+03,  1.00000e+02,  6.42370e+02,  3.89000e+01,\n",
+       "         2.34044e+01,  1.58285e+03,  1.40622e+03,  1.46200e+01,\n",
+       "         2.16100e+01,  5.54000e+02,  2.38806e+03,  9.05515e+03]])"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1e0df4b2",
+   "metadata": {},
+   "source": [
+    "## sklearn.preprocessing.MinMaxScaler\n",
+    "\n",
+    "* Input: (imputed, array)\n",
+    "* Output: readings (scaled, array)\n",
+    "* Effect: readings have been scaled to [-1, 1] range"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "f50662d2",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 4\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "37bf8d65",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "73c5d941",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-0.08045977, -0.69230769, -1.        , -1.        , -1.        ,\n",
+       "        -0.22543353,  0.17159763, -0.58823529, -0.60078439, -0.2720277 ,\n",
+       "        -1.        , -0.33333333, -1.        , -1.        , -0.59411765,\n",
+       "         0.42635659,  0.40377157, -0.13682891, -0.38048616, -1.        ,\n",
+       "         1.        ,  0.45249597, -0.49253731, -0.78048999],\n",
+       "       [ 0.2183908 , -0.53846154, -1.        , -1.        , -1.        ,\n",
+       "        -0.20231214,  0.41617357, -0.44117647, -0.674373  , -0.17737591,\n",
+       "        -1.        , -0.33333333, -1.        , -1.        , -0.4       ,\n",
+       "         0.33333333,  0.41607597, -0.04825569, -0.29473329, -1.        ,\n",
+       "         1.        ,  0.25603865, -0.55223881, -0.79951539],\n",
+       "       [-0.49425287,  0.38461538, -1.        , -1.        , -1.        ,\n",
+       "        -0.4566474 ,  0.47140039, -0.55882353, -0.65641449, -0.28510966,\n",
+       "        -1.        , -0.66666667, -1.        , -1.        , -0.28235294,\n",
+       "         0.25581395,  0.20369132, -0.2082724 , -0.25894666, -1.        ,\n",
+       "         1.        ,  0.42028986, -0.43283582, -0.71991385],\n",
+       "       [ 0.08045977, -0.07692308, -1.        , -1.        , -1.        ,\n",
+       "        -0.61849711,  0.64497041, -0.41176471, -0.6502219 , -0.66679492,\n",
+       "        -1.        , -0.33333333, -1.        , -1.        , -0.28235294,\n",
+       "         0.14728682,  0.28313495, -0.42552747, -0.33760972, -1.        ,\n",
+       "         1.        ,  0.48148148, -0.34328358, -0.75096473],\n",
+       "       [-0.2183908 , -0.38461538, -1.        , -1.        , -1.        ,\n",
+       "        -0.44508671,  0.38067061, -0.52941176, -0.65053153, -0.19584456,\n",
+       "        -1.        , -0.16666667, -1.        , -1.        , -0.27058824,\n",
+       "         0.17829457,  0.36471847, -0.42302068, -0.19074949, -1.        ,\n",
+       "         1.        ,  0.33655395, -0.49253731, -0.70008077]])"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e483b0ae",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame\n",
+    "\n",
+    "* Input: readings (scaled, array)\n",
+    "* Output: readings (dataframe)\n",
+    "* Effect: readings have been converted into a dataframe"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "4722001e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 5\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "id": "34b5d2ca",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "id": "011b9c51",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>14</th>\n",
+       "      <th>15</th>\n",
+       "      <th>16</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.080460</td>\n",
+       "      <td>-0.692308</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.225434</td>\n",
+       "      <td>0.171598</td>\n",
+       "      <td>-0.588235</td>\n",
+       "      <td>-0.600784</td>\n",
+       "      <td>-0.272028</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.594118</td>\n",
+       "      <td>0.426357</td>\n",
+       "      <td>0.403772</td>\n",
+       "      <td>-0.136829</td>\n",
+       "      <td>-0.380486</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.452496</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.780490</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0.218391</td>\n",
+       "      <td>-0.538462</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.202312</td>\n",
+       "      <td>0.416174</td>\n",
+       "      <td>-0.441176</td>\n",
+       "      <td>-0.674373</td>\n",
+       "      <td>-0.177376</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.400000</td>\n",
+       "      <td>0.333333</td>\n",
+       "      <td>0.416076</td>\n",
+       "      <td>-0.048256</td>\n",
+       "      <td>-0.294733</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.256039</td>\n",
+       "      <td>-0.552239</td>\n",
+       "      <td>-0.799515</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.494253</td>\n",
+       "      <td>0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.456647</td>\n",
+       "      <td>0.471400</td>\n",
+       "      <td>-0.558824</td>\n",
+       "      <td>-0.656414</td>\n",
+       "      <td>-0.285110</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.282353</td>\n",
+       "      <td>0.255814</td>\n",
+       "      <td>0.203691</td>\n",
+       "      <td>-0.208272</td>\n",
+       "      <td>-0.258947</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.420290</td>\n",
+       "      <td>-0.432836</td>\n",
+       "      <td>-0.719914</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0.080460</td>\n",
+       "      <td>-0.076923</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.618497</td>\n",
+       "      <td>0.644970</td>\n",
+       "      <td>-0.411765</td>\n",
+       "      <td>-0.650222</td>\n",
+       "      <td>-0.666795</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.282353</td>\n",
+       "      <td>0.147287</td>\n",
+       "      <td>0.283135</td>\n",
+       "      <td>-0.425527</td>\n",
+       "      <td>-0.337610</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.481481</td>\n",
+       "      <td>-0.343284</td>\n",
+       "      <td>-0.750965</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.218391</td>\n",
+       "      <td>-0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.445087</td>\n",
+       "      <td>0.380671</td>\n",
+       "      <td>-0.529412</td>\n",
+       "      <td>-0.650532</td>\n",
+       "      <td>-0.195845</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.270588</td>\n",
+       "      <td>0.178295</td>\n",
+       "      <td>0.364718</td>\n",
+       "      <td>-0.423021</td>\n",
+       "      <td>-0.190749</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.336554</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.700081</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 24 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "         0         1    2    3    4         5         6         7         8   \\\n",
+       "0 -0.080460 -0.692308 -1.0 -1.0 -1.0 -0.225434  0.171598 -0.588235 -0.600784   \n",
+       "1  0.218391 -0.538462 -1.0 -1.0 -1.0 -0.202312  0.416174 -0.441176 -0.674373   \n",
+       "2 -0.494253  0.384615 -1.0 -1.0 -1.0 -0.456647  0.471400 -0.558824 -0.656414   \n",
+       "3  0.080460 -0.076923 -1.0 -1.0 -1.0 -0.618497  0.644970 -0.411765 -0.650222   \n",
+       "4 -0.218391 -0.384615 -1.0 -1.0 -1.0 -0.445087  0.380671 -0.529412 -0.650532   \n",
+       "\n",
+       "         9   ...        14        15        16        17        18   19   20  \\\n",
+       "0 -0.272028  ... -0.594118  0.426357  0.403772 -0.136829 -0.380486 -1.0  1.0   \n",
+       "1 -0.177376  ... -0.400000  0.333333  0.416076 -0.048256 -0.294733 -1.0  1.0   \n",
+       "2 -0.285110  ... -0.282353  0.255814  0.203691 -0.208272 -0.258947 -1.0  1.0   \n",
+       "3 -0.666795  ... -0.282353  0.147287  0.283135 -0.425527 -0.337610 -1.0  1.0   \n",
+       "4 -0.195845  ... -0.270588  0.178295  0.364718 -0.423021 -0.190749 -1.0  1.0   \n",
+       "\n",
+       "         21        22        23  \n",
+       "0  0.452496 -0.492537 -0.780490  \n",
+       "1  0.256039 -0.552239 -0.799515  \n",
+       "2  0.420290 -0.432836 -0.719914  \n",
+       "3  0.481481 -0.343284 -0.750965  \n",
+       "4  0.336554 -0.492537 -0.700081  \n",
+       "\n",
+       "[5 rows x 24 columns]"
+      ]
+     },
+     "execution_count": 24,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9539c0e6",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe)\n",
+    "* Output: readings (dataframe with turbine_id)\n",
+    "* Effect: turbine_id has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "id": "d58c17c1",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 6\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "id": "b5b62c52",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "id": "8bedb44e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>15</th>\n",
+       "      <th>16</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>turbine_id</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.080460</td>\n",
+       "      <td>-0.692308</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.225434</td>\n",
+       "      <td>0.171598</td>\n",
+       "      <td>-0.588235</td>\n",
+       "      <td>-0.600784</td>\n",
+       "      <td>-0.272028</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.426357</td>\n",
+       "      <td>0.403772</td>\n",
+       "      <td>-0.136829</td>\n",
+       "      <td>-0.380486</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.452496</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.780490</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0.218391</td>\n",
+       "      <td>-0.538462</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.202312</td>\n",
+       "      <td>0.416174</td>\n",
+       "      <td>-0.441176</td>\n",
+       "      <td>-0.674373</td>\n",
+       "      <td>-0.177376</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.333333</td>\n",
+       "      <td>0.416076</td>\n",
+       "      <td>-0.048256</td>\n",
+       "      <td>-0.294733</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.256039</td>\n",
+       "      <td>-0.552239</td>\n",
+       "      <td>-0.799515</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.494253</td>\n",
+       "      <td>0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.456647</td>\n",
+       "      <td>0.471400</td>\n",
+       "      <td>-0.558824</td>\n",
+       "      <td>-0.656414</td>\n",
+       "      <td>-0.285110</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.255814</td>\n",
+       "      <td>0.203691</td>\n",
+       "      <td>-0.208272</td>\n",
+       "      <td>-0.258947</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.420290</td>\n",
+       "      <td>-0.432836</td>\n",
+       "      <td>-0.719914</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0.080460</td>\n",
+       "      <td>-0.076923</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.618497</td>\n",
+       "      <td>0.644970</td>\n",
+       "      <td>-0.411765</td>\n",
+       "      <td>-0.650222</td>\n",
+       "      <td>-0.666795</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.147287</td>\n",
+       "      <td>0.283135</td>\n",
+       "      <td>-0.425527</td>\n",
+       "      <td>-0.337610</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.481481</td>\n",
+       "      <td>-0.343284</td>\n",
+       "      <td>-0.750965</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.218391</td>\n",
+       "      <td>-0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.445087</td>\n",
+       "      <td>0.380671</td>\n",
+       "      <td>-0.529412</td>\n",
+       "      <td>-0.650532</td>\n",
+       "      <td>-0.195845</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.178295</td>\n",
+       "      <td>0.364718</td>\n",
+       "      <td>-0.423021</td>\n",
+       "      <td>-0.190749</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.336554</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.700081</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 25 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1    2    3    4         5         6         7         8  \\\n",
+       "0 -0.080460 -0.692308 -1.0 -1.0 -1.0 -0.225434  0.171598 -0.588235 -0.600784   \n",
+       "1  0.218391 -0.538462 -1.0 -1.0 -1.0 -0.202312  0.416174 -0.441176 -0.674373   \n",
+       "2 -0.494253  0.384615 -1.0 -1.0 -1.0 -0.456647  0.471400 -0.558824 -0.656414   \n",
+       "3  0.080460 -0.076923 -1.0 -1.0 -1.0 -0.618497  0.644970 -0.411765 -0.650222   \n",
+       "4 -0.218391 -0.384615 -1.0 -1.0 -1.0 -0.445087  0.380671 -0.529412 -0.650532   \n",
+       "\n",
+       "          9  ...        15        16        17        18   19   20        21  \\\n",
+       "0 -0.272028  ...  0.426357  0.403772 -0.136829 -0.380486 -1.0  1.0  0.452496   \n",
+       "1 -0.177376  ...  0.333333  0.416076 -0.048256 -0.294733 -1.0  1.0  0.256039   \n",
+       "2 -0.285110  ...  0.255814  0.203691 -0.208272 -0.258947 -1.0  1.0  0.420290   \n",
+       "3 -0.666795  ...  0.147287  0.283135 -0.425527 -0.337610 -1.0  1.0  0.481481   \n",
+       "4 -0.195845  ...  0.178295  0.364718 -0.423021 -0.190749 -1.0  1.0  0.336554   \n",
+       "\n",
+       "         22        23  turbine_id  \n",
+       "0 -0.492537 -0.780490           1  \n",
+       "1 -0.552239 -0.799515           1  \n",
+       "2 -0.432836 -0.719914           1  \n",
+       "3 -0.343284 -0.750965           1  \n",
+       "4 -0.492537 -0.700081           1  \n",
+       "\n",
+       "[5 rows x 25 columns]"
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f2849d45",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe with turbine_id)\n",
+    "* Output: readings (dataframe with turbine_id and timestamp)\n",
+    "* Effect: timestamp has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "id": "9896ef19",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 7\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "id": "384e4e91",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "id": "7dcc2b2c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>16</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.080460</td>\n",
+       "      <td>-0.692308</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.225434</td>\n",
+       "      <td>0.171598</td>\n",
+       "      <td>-0.588235</td>\n",
+       "      <td>-0.600784</td>\n",
+       "      <td>-0.272028</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.403772</td>\n",
+       "      <td>-0.136829</td>\n",
+       "      <td>-0.380486</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.452496</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.780490</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:10:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0.218391</td>\n",
+       "      <td>-0.538462</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.202312</td>\n",
+       "      <td>0.416174</td>\n",
+       "      <td>-0.441176</td>\n",
+       "      <td>-0.674373</td>\n",
+       "      <td>-0.177376</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.416076</td>\n",
+       "      <td>-0.048256</td>\n",
+       "      <td>-0.294733</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.256039</td>\n",
+       "      <td>-0.552239</td>\n",
+       "      <td>-0.799515</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:20:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.494253</td>\n",
+       "      <td>0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.456647</td>\n",
+       "      <td>0.471400</td>\n",
+       "      <td>-0.558824</td>\n",
+       "      <td>-0.656414</td>\n",
+       "      <td>-0.285110</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.203691</td>\n",
+       "      <td>-0.208272</td>\n",
+       "      <td>-0.258947</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.420290</td>\n",
+       "      <td>-0.432836</td>\n",
+       "      <td>-0.719914</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:30:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0.080460</td>\n",
+       "      <td>-0.076923</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.618497</td>\n",
+       "      <td>0.644970</td>\n",
+       "      <td>-0.411765</td>\n",
+       "      <td>-0.650222</td>\n",
+       "      <td>-0.666795</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.283135</td>\n",
+       "      <td>-0.425527</td>\n",
+       "      <td>-0.337610</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.481481</td>\n",
+       "      <td>-0.343284</td>\n",
+       "      <td>-0.750965</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:40:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.218391</td>\n",
+       "      <td>-0.384615</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>-0.445087</td>\n",
+       "      <td>0.380671</td>\n",
+       "      <td>-0.529412</td>\n",
+       "      <td>-0.650532</td>\n",
+       "      <td>-0.195845</td>\n",
+       "      <td>...</td>\n",
+       "      <td>0.364718</td>\n",
+       "      <td>-0.423021</td>\n",
+       "      <td>-0.190749</td>\n",
+       "      <td>-1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>0.336554</td>\n",
+       "      <td>-0.492537</td>\n",
+       "      <td>-0.700081</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2013-01-12 00:50:00</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1    2    3    4         5         6         7         8  \\\n",
+       "0 -0.080460 -0.692308 -1.0 -1.0 -1.0 -0.225434  0.171598 -0.588235 -0.600784   \n",
+       "1  0.218391 -0.538462 -1.0 -1.0 -1.0 -0.202312  0.416174 -0.441176 -0.674373   \n",
+       "2 -0.494253  0.384615 -1.0 -1.0 -1.0 -0.456647  0.471400 -0.558824 -0.656414   \n",
+       "3  0.080460 -0.076923 -1.0 -1.0 -1.0 -0.618497  0.644970 -0.411765 -0.650222   \n",
+       "4 -0.218391 -0.384615 -1.0 -1.0 -1.0 -0.445087  0.380671 -0.529412 -0.650532   \n",
+       "\n",
+       "          9  ...        16        17        18   19   20        21        22  \\\n",
+       "0 -0.272028  ...  0.403772 -0.136829 -0.380486 -1.0  1.0  0.452496 -0.492537   \n",
+       "1 -0.177376  ...  0.416076 -0.048256 -0.294733 -1.0  1.0  0.256039 -0.552239   \n",
+       "2 -0.285110  ...  0.203691 -0.208272 -0.258947 -1.0  1.0  0.420290 -0.432836   \n",
+       "3 -0.666795  ...  0.283135 -0.425527 -0.337610 -1.0  1.0  0.481481 -0.343284   \n",
+       "4 -0.195845  ...  0.364718 -0.423021 -0.190749 -1.0  1.0  0.336554 -0.492537   \n",
+       "\n",
+       "         23  turbine_id           timestamp  \n",
+       "0 -0.780490           1 2013-01-12 00:10:00  \n",
+       "1 -0.799515           1 2013-01-12 00:20:00  \n",
+       "2 -0.719914           1 2013-01-12 00:30:00  \n",
+       "3 -0.750965           1 2013-01-12 00:40:00  \n",
+       "4 -0.700081           1 2013-01-12 00:50:00  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "087b270d",
+   "metadata": {},
+   "source": [
+    "## mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences\n",
+    "\n",
+    "* Input: X, readings (dataframe with turbine_id and timestamp)\n",
+    "* Output: X\n",
+    "* Effect: X has been converted to a 3d numpy array that contains 1 matrix of shape\n",
+    "  (window_size x num_signals) for each one of the target times."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "id": "b4ff2d0a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'window_size': 24, 'cutoff_time': 'cutoff_time', 'time_index': 'timestamp'}"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pipeline._pipeline.get_hyperparameters()[\n",
+    "    'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1']"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "id": "2c8fd174",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 8\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "id": "b051da01",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "id": "a802d22b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(33727, 26)"
+      ]
+     },
+     "execution_count": 34,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "id": "cc53012b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(18131,)"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['y'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "id": "b1212aaf",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(18131, 24, 24)"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "id": "87abb56d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.2183908 , -0.53846154, -1.        , -1.        , -1.        ,\n",
+       "        -0.20231214,  0.41617357, -0.44117647, -0.674373  , -0.17737591,\n",
+       "        -1.        , -0.33333333, -1.        , -1.        , -0.4       ,\n",
+       "         0.33333333,  0.41607597, -0.04825569, -0.29473329, -1.        ,\n",
+       "         1.        ,  0.25603865, -0.55223881, -0.79951539],\n",
+       "       [-0.49425287,  0.38461538, -1.        , -1.        , -1.        ,\n",
+       "        -0.4566474 ,  0.47140039, -0.55882353, -0.65641449, -0.28510966,\n",
+       "        -1.        , -0.66666667, -1.        , -1.        , -0.28235294,\n",
+       "         0.25581395,  0.20369132, -0.2082724 , -0.25894666, -1.        ,\n",
+       "         1.        ,  0.42028986, -0.43283582, -0.71991385],\n",
+       "       [ 0.08045977, -0.07692308, -1.        , -1.        , -1.        ,\n",
+       "        -0.61849711,  0.64497041, -0.41176471, -0.6502219 , -0.66679492,\n",
+       "        -1.        , -0.33333333, -1.        , -1.        , -0.28235294,\n",
+       "         0.14728682,  0.28313495, -0.42552747, -0.33760972, -1.        ,\n",
+       "         1.        ,  0.48148148, -0.34328358, -0.75096473]])"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'][0][:3]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8876f20e",
+   "metadata": {},
+   "source": [
+    "## keras.Sequential.LSTMTimeSeriesRegressor\n",
+    "\n",
+    "* Input: X, y\n",
+    "* Output: \n",
+    "* Effect: LSTM has been fitted."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "id": "561c3e09",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2022-02-01 10:08:21.044547: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
+      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+      "2022-02-01 10:08:21.080727: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f8579596430 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
+      "2022-02-01 10:08:21.080742: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version\n"
+     ]
+    }
+   ],
+   "source": [
+    "step = 9\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/tutorials/pipelines/lstm_with_unstack.ipynb b/tutorials/pipelines/lstm_with_unstack.ipynb
new file mode 100644
index 0000000..799b90e
--- /dev/null
+++ b/tutorials/pipelines/lstm_with_unstack.ipynb
@@ -0,0 +1,2249 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# lstm_with_unstack"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.demo import load_demo\n",
+    "\n",
+    "target_times, readings = load_demo()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pipeline_name = 'lstm_with_unstack'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from draco.pipeline import DracoPipeline\n",
+    "\n",
+    "pipeline = DracoPipeline(pipeline_name)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['mlblocks.MLPipeline',\n",
+       " 'pandas.DataFrame.pop',\n",
+       " 'pandas.DataFrame.pop',\n",
+       " 'sklearn.impute.SimpleImputer',\n",
+       " 'sklearn.preprocessing.MinMaxScaler',\n",
+       " 'pandas.DataFrame',\n",
+       " 'pandas.DataFrame.set',\n",
+       " 'pandas.DataFrame.set',\n",
+       " 'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences',\n",
+       " 'keras.Sequential.LSTMTimeSeriesClassifier']"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pipeline.template['primitives']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Step by Step execution"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Input Data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>signal_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S01</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>323.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S02</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>320.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S03</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>284.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S04</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>348.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>S05</td>\n",
+       "      <td>2013-01-10</td>\n",
+       "      <td>273.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id signal_id  timestamp  value\n",
+       "0       T001       S01 2013-01-10  323.0\n",
+       "1       T001       S02 2013-01-10  320.0\n",
+       "2       T001       S03 2013-01-10  284.0\n",
+       "3       T001       S04 2013-01-10  348.0\n",
+       "4       T001       S05 2013-01-10  273.0"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "readings.head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>cutoff_time</th>\n",
+       "      <th>target</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-12</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-13</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-14</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-15</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-16</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id cutoff_time  target\n",
+       "0       T001  2013-01-12       0\n",
+       "1       T001  2013-01-13       0\n",
+       "2       T001  2013-01-14       0\n",
+       "3       T001  2013-01-15       1\n",
+       "4       T001  2013-01-16       0"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "target_times.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Data Preparation (part of Draco Pipeline)\n",
+    "\n",
+    "* Input: target_times, readings, turbines\n",
+    "* Output: X, y, readings, turbines\n",
+    "* Effect: target_times has been split into X and y"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## mlblocks.MLPipeline\n",
+    "\n",
+    "### pandas.DataFrame.resample\n",
+    "\n",
+    "* Input: readings\n",
+    "* Output: readings (resampled)\n",
+    "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
+    "  signal_id and timestamp have been set as a multi-index\n",
+    "  \n",
+    "### pandas.DataFrame.unstack\n",
+    "\n",
+    "* Input: readings (resampled)\n",
+    "* Output: readings (unstacked)\n",
+    "* Effect: readings have been unstacked"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "context = pipeline.fit(target_times, readings, output_=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 28 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  turbine_id           timestamp  value_S01  value_S02  value_S03  value_S04  \\\n",
+       "0       T001 2013-01-10 00:00:00      323.0      320.0      284.0      348.0   \n",
+       "1       T001 2013-01-10 00:10:00      346.0      384.0      367.0      411.0   \n",
+       "2       T001 2013-01-10 00:20:00      407.0      363.0      407.0      393.0   \n",
+       "3       T001 2013-01-10 00:30:00      257.0      307.0      315.0      361.0   \n",
+       "4       T001 2013-01-10 00:40:00      267.0      309.0      314.0      355.0   \n",
+       "\n",
+       "   value_S05  value_S06  value_S07  value_S08  ...  value_S17  value_S18  \\\n",
+       "0      273.0      342.0      280.0  3197842.0  ...       11.7  3131020.0   \n",
+       "1      331.0      360.0      249.0  3197900.0  ...       10.2  3131420.0   \n",
+       "2      275.0      335.0      270.0  3197968.0  ...        9.5  3131822.0   \n",
+       "3      317.0      354.0      271.0  3198011.0  ...       10.5  3132179.0   \n",
+       "4      262.0      246.0      212.0  3198056.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 28 columns]"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (unstacked)\n",
+    "* Output: readings (without turbine_id), turbine_id\n",
+    "* Effect: turbine_id has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 1\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'X', 'y', 'turbine_id'])"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0    T001\n",
+       "1    T001\n",
+       "2    T001\n",
+       "3    T001\n",
+       "4    T001\n",
+       "Name: turbine_id, dtype: object"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['turbine_id'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>timestamp</th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>value_S09</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>695000.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>695063.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>695124.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>695175.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>695226.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 27 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "            timestamp  value_S01  value_S02  value_S03  value_S04  value_S05  \\\n",
+       "0 2013-01-10 00:00:00      323.0      320.0      284.0      348.0      273.0   \n",
+       "1 2013-01-10 00:10:00      346.0      384.0      367.0      411.0      331.0   \n",
+       "2 2013-01-10 00:20:00      407.0      363.0      407.0      393.0      275.0   \n",
+       "3 2013-01-10 00:30:00      257.0      307.0      315.0      361.0      317.0   \n",
+       "4 2013-01-10 00:40:00      267.0      309.0      314.0      355.0      262.0   \n",
+       "\n",
+       "   value_S06  value_S07  value_S08  value_S09  ...  value_S17  value_S18  \\\n",
+       "0      342.0      280.0  3197842.0   695000.0  ...       11.7  3131020.0   \n",
+       "1      360.0      249.0  3197900.0   695063.0  ...       10.2  3131420.0   \n",
+       "2      335.0      270.0  3197968.0   695124.0  ...        9.5  3131822.0   \n",
+       "3      354.0      271.0  3198011.0   695175.0  ...       10.5  3132179.0   \n",
+       "4      246.0      212.0  3198056.0   695226.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 27 columns]"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.pop\n",
+    "\n",
+    "* Input: readings (without turbine_id)\n",
+    "* Output: readings (without timestamp), timestamp\n",
+    "* Effect: timestamp has been popped from readings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 2\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'X', 'y', 'timestamp'])"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0   2013-01-10 00:00:00\n",
+       "1   2013-01-10 00:10:00\n",
+       "2   2013-01-10 00:20:00\n",
+       "3   2013-01-10 00:30:00\n",
+       "4   2013-01-10 00:40:00\n",
+       "Name: timestamp, dtype: datetime64[ns]"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['timestamp'].head()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>value_S01</th>\n",
+       "      <th>value_S02</th>\n",
+       "      <th>value_S03</th>\n",
+       "      <th>value_S04</th>\n",
+       "      <th>value_S05</th>\n",
+       "      <th>value_S06</th>\n",
+       "      <th>value_S07</th>\n",
+       "      <th>value_S08</th>\n",
+       "      <th>value_S09</th>\n",
+       "      <th>value_S10</th>\n",
+       "      <th>...</th>\n",
+       "      <th>value_S17</th>\n",
+       "      <th>value_S18</th>\n",
+       "      <th>value_S19</th>\n",
+       "      <th>value_S20</th>\n",
+       "      <th>value_S21</th>\n",
+       "      <th>value_S22</th>\n",
+       "      <th>value_S23</th>\n",
+       "      <th>value_S24</th>\n",
+       "      <th>value_S25</th>\n",
+       "      <th>value_S26</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>323.0</td>\n",
+       "      <td>320.0</td>\n",
+       "      <td>284.0</td>\n",
+       "      <td>348.0</td>\n",
+       "      <td>273.0</td>\n",
+       "      <td>342.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>3197842.0</td>\n",
+       "      <td>695000.0</td>\n",
+       "      <td>3348234.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11.7</td>\n",
+       "      <td>3131020.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>47.0</td>\n",
+       "      <td>356.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>346.0</td>\n",
+       "      <td>384.0</td>\n",
+       "      <td>367.0</td>\n",
+       "      <td>411.0</td>\n",
+       "      <td>331.0</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>249.0</td>\n",
+       "      <td>3197900.0</td>\n",
+       "      <td>695063.0</td>\n",
+       "      <td>3348296.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.2</td>\n",
+       "      <td>3131420.0</td>\n",
+       "      <td>58.0</td>\n",
+       "      <td>63.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>42.0</td>\n",
+       "      <td>400.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>407.0</td>\n",
+       "      <td>363.0</td>\n",
+       "      <td>407.0</td>\n",
+       "      <td>393.0</td>\n",
+       "      <td>275.0</td>\n",
+       "      <td>335.0</td>\n",
+       "      <td>270.0</td>\n",
+       "      <td>3197968.0</td>\n",
+       "      <td>695124.0</td>\n",
+       "      <td>3348363.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.5</td>\n",
+       "      <td>3131822.0</td>\n",
+       "      <td>68.0</td>\n",
+       "      <td>61.0</td>\n",
+       "      <td>67.0</td>\n",
+       "      <td>66.0</td>\n",
+       "      <td>46.0</td>\n",
+       "      <td>55.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>402.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>257.0</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>315.0</td>\n",
+       "      <td>361.0</td>\n",
+       "      <td>317.0</td>\n",
+       "      <td>354.0</td>\n",
+       "      <td>271.0</td>\n",
+       "      <td>3198011.0</td>\n",
+       "      <td>695175.0</td>\n",
+       "      <td>3348416.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10.5</td>\n",
+       "      <td>3132179.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>62.0</td>\n",
+       "      <td>53.0</td>\n",
+       "      <td>60.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>357.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>267.0</td>\n",
+       "      <td>309.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>355.0</td>\n",
+       "      <td>262.0</td>\n",
+       "      <td>246.0</td>\n",
+       "      <td>212.0</td>\n",
+       "      <td>3198056.0</td>\n",
+       "      <td>695226.0</td>\n",
+       "      <td>3348470.0</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9.6</td>\n",
+       "      <td>3132501.0</td>\n",
+       "      <td>45.0</td>\n",
+       "      <td>51.0</td>\n",
+       "      <td>54.0</td>\n",
+       "      <td>59.0</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>41.0</td>\n",
+       "      <td>36.0</td>\n",
+       "      <td>322.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   value_S01  value_S02  value_S03  value_S04  value_S05  value_S06  \\\n",
+       "0      323.0      320.0      284.0      348.0      273.0      342.0   \n",
+       "1      346.0      384.0      367.0      411.0      331.0      360.0   \n",
+       "2      407.0      363.0      407.0      393.0      275.0      335.0   \n",
+       "3      257.0      307.0      315.0      361.0      317.0      354.0   \n",
+       "4      267.0      309.0      314.0      355.0      262.0      246.0   \n",
+       "\n",
+       "   value_S07  value_S08  value_S09  value_S10  ...  value_S17  value_S18  \\\n",
+       "0      280.0  3197842.0   695000.0  3348234.0  ...       11.7  3131020.0   \n",
+       "1      249.0  3197900.0   695063.0  3348296.0  ...       10.2  3131420.0   \n",
+       "2      270.0  3197968.0   695124.0  3348363.0  ...        9.5  3131822.0   \n",
+       "3      271.0  3198011.0   695175.0  3348416.0  ...       10.5  3132179.0   \n",
+       "4      212.0  3198056.0   695226.0  3348470.0  ...        9.6  3132501.0   \n",
+       "\n",
+       "   value_S19  value_S20  value_S21  value_S22  value_S23  value_S24  \\\n",
+       "0       55.0       55.0       47.0       58.0       45.0       58.0   \n",
+       "1       58.0       63.0       62.0       67.0       55.0       61.0   \n",
+       "2       68.0       61.0       67.0       66.0       46.0       55.0   \n",
+       "3       43.0       51.0       53.0       62.0       53.0       60.0   \n",
+       "4       45.0       51.0       54.0       59.0       43.0       41.0   \n",
+       "\n",
+       "   value_S25  value_S26  \n",
+       "0       47.0      356.0  \n",
+       "1       42.0      400.0  \n",
+       "2       45.0      402.0  \n",
+       "3       45.0      357.0  \n",
+       "4       36.0      322.0  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## sklearn.impute.SimpleImputer\n",
+    "\n",
+    "* Input: readings (unstacked, no turbine_id, no timestamp)\n",
+    "* Output: readings (imputed, numpy array)\n",
+    "* Effect: readings have been imputed and converted to numpy array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 3\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[3.230000e+02, 3.200000e+02, 2.840000e+02, 3.480000e+02,\n",
+       "        2.730000e+02, 3.420000e+02, 2.800000e+02, 3.197842e+06,\n",
+       "        6.950000e+05, 3.348234e+06, 3.436762e+06, 3.322362e+06,\n",
+       "        3.357952e+06, 3.223797e+06, 8.300000e+00, 6.000000e+00,\n",
+       "        1.170000e+01, 3.131020e+06, 5.500000e+01, 5.500000e+01,\n",
+       "        4.700000e+01, 5.800000e+01, 4.500000e+01, 5.800000e+01,\n",
+       "        4.700000e+01, 3.560000e+02],\n",
+       "       [3.460000e+02, 3.840000e+02, 3.670000e+02, 4.110000e+02,\n",
+       "        3.310000e+02, 3.600000e+02, 2.490000e+02, 3.197900e+06,\n",
+       "        6.950630e+05, 3.348296e+06, 3.436829e+06, 3.322417e+06,\n",
+       "        3.358013e+06, 3.223839e+06, 7.600000e+00, 5.000000e+00,\n",
+       "        1.020000e+01, 3.131420e+06, 5.800000e+01, 6.300000e+01,\n",
+       "        6.200000e+01, 6.700000e+01, 5.500000e+01, 6.100000e+01,\n",
+       "        4.200000e+01, 4.000000e+02],\n",
+       "       [4.070000e+02, 3.630000e+02, 4.070000e+02, 3.930000e+02,\n",
+       "        2.750000e+02, 3.350000e+02, 2.700000e+02, 3.197968e+06,\n",
+       "        6.951240e+05, 3.348363e+06, 3.436895e+06, 3.322463e+06,\n",
+       "        3.358068e+06, 3.223884e+06, 7.800000e+00, 5.700000e+00,\n",
+       "        9.500000e+00, 3.131822e+06, 6.800000e+01, 6.100000e+01,\n",
+       "        6.700000e+01, 6.600000e+01, 4.600000e+01, 5.500000e+01,\n",
+       "        4.500000e+01, 4.020000e+02],\n",
+       "       [2.570000e+02, 3.070000e+02, 3.150000e+02, 3.610000e+02,\n",
+       "        3.170000e+02, 3.540000e+02, 2.710000e+02, 3.198011e+06,\n",
+       "        6.951750e+05, 3.348416e+06, 3.436957e+06, 3.322516e+06,\n",
+       "        3.358128e+06, 3.223929e+06, 8.600000e+00, 6.600000e+00,\n",
+       "        1.050000e+01, 3.132179e+06, 4.300000e+01, 5.100000e+01,\n",
+       "        5.300000e+01, 6.200000e+01, 5.300000e+01, 6.000000e+01,\n",
+       "        4.500000e+01, 3.570000e+02],\n",
+       "       [2.670000e+02, 3.090000e+02, 3.140000e+02, 3.550000e+02,\n",
+       "        2.620000e+02, 2.460000e+02, 2.120000e+02, 3.198056e+06,\n",
+       "        6.952260e+05, 3.348470e+06, 3.437016e+06, 3.322559e+06,\n",
+       "        3.358169e+06, 3.223965e+06, 7.500000e+00, 5.900000e+00,\n",
+       "        9.600000e+00, 3.132501e+06, 4.500000e+01, 5.100000e+01,\n",
+       "        5.400000e+01, 5.900000e+01, 4.300000e+01, 4.100000e+01,\n",
+       "        3.600000e+01, 3.220000e+02]])"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## sklearn.preprocessing.MinMaxScaler\n",
+    "\n",
+    "* Input: (imputed, array)\n",
+    "* Output: readings (scaled, array)\n",
+    "* Effect: readings have been scaled to [-1, 1] range"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 4\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-0.23563892, -0.24267292, -0.3286385 , -0.17702227, -0.35287222,\n",
+       "        -0.19248826, -0.3317757 , -1.        , -1.        , -1.        ,\n",
+       "        -1.        , -1.        , -1.        , -1.        , -0.11702128,\n",
+       "        -0.24050633, -0.25714286, -0.37378787, -0.22758621, -0.22758621,\n",
+       "        -0.31972789, -0.1862069 , -0.36986301, -0.1862069 , -0.33793103,\n",
+       "        -0.26141079],\n",
+       "       [-0.18171161, -0.0926143 , -0.13380282, -0.02930832, -0.21688159,\n",
+       "        -0.15023474, -0.40420561, -0.99995911, -0.99995779, -0.99995941,\n",
+       "        -0.99995718, -0.99996326, -0.99996042, -0.99997164, -0.19148936,\n",
+       "        -0.36708861, -0.35238095, -0.37370786, -0.1862069 , -0.11724138,\n",
+       "        -0.11564626, -0.06206897, -0.23287671, -0.14482759, -0.40689655,\n",
+       "        -0.17012448],\n",
+       "       [-0.03868699, -0.14185229, -0.0399061 , -0.07151231, -0.34818288,\n",
+       "        -0.20892019, -0.35514019, -0.99991116, -0.99991693, -0.99991555,\n",
+       "        -0.999915  , -0.99993254, -0.99992474, -0.99994125, -0.17021277,\n",
+       "        -0.27848101, -0.3968254 , -0.37362746, -0.04827586, -0.14482759,\n",
+       "        -0.04761905, -0.07586207, -0.35616438, -0.22758621, -0.36551724,\n",
+       "        -0.1659751 ],\n",
+       "       [-0.39038687, -0.27315358, -0.25586854, -0.14654162, -0.24970692,\n",
+       "        -0.16431925, -0.35280374, -0.99988085, -0.99988276, -0.99988086,\n",
+       "        -0.99987538, -0.99989714, -0.99988581, -0.99991086, -0.08510638,\n",
+       "        -0.16455696, -0.33333333, -0.37355606, -0.39310345, -0.28275862,\n",
+       "        -0.23809524, -0.13103448, -0.26027397, -0.15862069, -0.36551724,\n",
+       "        -0.2593361 ],\n",
+       "       [-0.36694021, -0.26846424, -0.25821596, -0.16060961, -0.37866354,\n",
+       "        -0.41784038, -0.49065421, -0.99984912, -0.99984859, -0.99984551,\n",
+       "        -0.99983767, -0.99986841, -0.99985921, -0.99988655, -0.20212766,\n",
+       "        -0.25316456, -0.39047619, -0.37349166, -0.36551724, -0.28275862,\n",
+       "        -0.2244898 , -0.17241379, -0.39726027, -0.42068966, -0.48965517,\n",
+       "        -0.33195021]])"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'][0:5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame\n",
+    "\n",
+    "* Input: readings (scaled, array)\n",
+    "* Output: readings (dataframe)\n",
+    "* Effect: readings have been converted into a dataframe"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 5\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 25,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>16</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.257143</td>\n",
+       "      <td>-0.373788</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.352381</td>\n",
+       "      <td>-0.373708</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.396825</td>\n",
+       "      <td>-0.373627</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.333333</td>\n",
+       "      <td>-0.373556</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.390476</td>\n",
+       "      <td>-0.373492</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 26 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "         0         1         2         3         4         5         6   \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "         7         8         9   ...        16        17        18        19  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.257143 -0.373788 -0.227586 -0.227586   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.352381 -0.373708 -0.186207 -0.117241   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.396825 -0.373627 -0.048276 -0.144828   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.333333 -0.373556 -0.393103 -0.282759   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.390476 -0.373492 -0.365517 -0.282759   \n",
+       "\n",
+       "         20        21        22        23        24        25  \n",
+       "0 -0.319728 -0.186207 -0.369863 -0.186207 -0.337931 -0.261411  \n",
+       "1 -0.115646 -0.062069 -0.232877 -0.144828 -0.406897 -0.170124  \n",
+       "2 -0.047619 -0.075862 -0.356164 -0.227586 -0.365517 -0.165975  \n",
+       "3 -0.238095 -0.131034 -0.260274 -0.158621 -0.365517 -0.259336  \n",
+       "4 -0.224490 -0.172414 -0.397260 -0.420690 -0.489655 -0.331950  \n",
+       "\n",
+       "[5 rows x 26 columns]"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe)\n",
+    "* Output: readings (dataframe with turbine_id)\n",
+    "* Effect: turbine_id has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 6\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 28,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>17</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "      <th>turbine_id</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373788</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373708</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373627</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373556</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.373492</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "      <td>T001</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 27 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1         2         3         4         5         6  \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "          7         8         9  ...        17        18        19        20  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.373788 -0.227586 -0.227586 -0.319728   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.373708 -0.186207 -0.117241 -0.115646   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.373627 -0.048276 -0.144828 -0.047619   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.373556 -0.393103 -0.282759 -0.238095   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.373492 -0.365517 -0.282759 -0.224490   \n",
+       "\n",
+       "         21        22        23        24        25  turbine_id  \n",
+       "0 -0.186207 -0.369863 -0.186207 -0.337931 -0.261411        T001  \n",
+       "1 -0.062069 -0.232877 -0.144828 -0.406897 -0.170124        T001  \n",
+       "2 -0.075862 -0.356164 -0.227586 -0.365517 -0.165975        T001  \n",
+       "3 -0.131034 -0.260274 -0.158621 -0.365517 -0.259336        T001  \n",
+       "4 -0.172414 -0.397260 -0.420690 -0.489655 -0.331950        T001  \n",
+       "\n",
+       "[5 rows x 27 columns]"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## pandas.DataFrame.set\n",
+    "\n",
+    "* Input: readings (dataframe with turbine_id)\n",
+    "* Output: readings (dataframe with turbine_id and timestamp)\n",
+    "* Effect: timestamp has been set as a readings column"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 7\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>0</th>\n",
+       "      <th>1</th>\n",
+       "      <th>2</th>\n",
+       "      <th>3</th>\n",
+       "      <th>4</th>\n",
+       "      <th>5</th>\n",
+       "      <th>6</th>\n",
+       "      <th>7</th>\n",
+       "      <th>8</th>\n",
+       "      <th>9</th>\n",
+       "      <th>...</th>\n",
+       "      <th>18</th>\n",
+       "      <th>19</th>\n",
+       "      <th>20</th>\n",
+       "      <th>21</th>\n",
+       "      <th>22</th>\n",
+       "      <th>23</th>\n",
+       "      <th>24</th>\n",
+       "      <th>25</th>\n",
+       "      <th>turbine_id</th>\n",
+       "      <th>timestamp</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>-0.235639</td>\n",
+       "      <td>-0.242673</td>\n",
+       "      <td>-0.328638</td>\n",
+       "      <td>-0.177022</td>\n",
+       "      <td>-0.352872</td>\n",
+       "      <td>-0.192488</td>\n",
+       "      <td>-0.331776</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>-1.000000</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.319728</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.369863</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.337931</td>\n",
+       "      <td>-0.261411</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:00:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>-0.181712</td>\n",
+       "      <td>-0.092614</td>\n",
+       "      <td>-0.133803</td>\n",
+       "      <td>-0.029308</td>\n",
+       "      <td>-0.216882</td>\n",
+       "      <td>-0.150235</td>\n",
+       "      <td>-0.404206</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>-0.999958</td>\n",
+       "      <td>-0.999959</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.186207</td>\n",
+       "      <td>-0.117241</td>\n",
+       "      <td>-0.115646</td>\n",
+       "      <td>-0.062069</td>\n",
+       "      <td>-0.232877</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.406897</td>\n",
+       "      <td>-0.170124</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:10:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>-0.038687</td>\n",
+       "      <td>-0.141852</td>\n",
+       "      <td>-0.039906</td>\n",
+       "      <td>-0.071512</td>\n",
+       "      <td>-0.348183</td>\n",
+       "      <td>-0.208920</td>\n",
+       "      <td>-0.355140</td>\n",
+       "      <td>-0.999911</td>\n",
+       "      <td>-0.999917</td>\n",
+       "      <td>-0.999916</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.048276</td>\n",
+       "      <td>-0.144828</td>\n",
+       "      <td>-0.047619</td>\n",
+       "      <td>-0.075862</td>\n",
+       "      <td>-0.356164</td>\n",
+       "      <td>-0.227586</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.165975</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:20:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>-0.390387</td>\n",
+       "      <td>-0.273154</td>\n",
+       "      <td>-0.255869</td>\n",
+       "      <td>-0.146542</td>\n",
+       "      <td>-0.249707</td>\n",
+       "      <td>-0.164319</td>\n",
+       "      <td>-0.352804</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>-0.999883</td>\n",
+       "      <td>-0.999881</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.393103</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.238095</td>\n",
+       "      <td>-0.131034</td>\n",
+       "      <td>-0.260274</td>\n",
+       "      <td>-0.158621</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.259336</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:30:00</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>-0.366940</td>\n",
+       "      <td>-0.268464</td>\n",
+       "      <td>-0.258216</td>\n",
+       "      <td>-0.160610</td>\n",
+       "      <td>-0.378664</td>\n",
+       "      <td>-0.417840</td>\n",
+       "      <td>-0.490654</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999849</td>\n",
+       "      <td>-0.999846</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-0.365517</td>\n",
+       "      <td>-0.282759</td>\n",
+       "      <td>-0.224490</td>\n",
+       "      <td>-0.172414</td>\n",
+       "      <td>-0.397260</td>\n",
+       "      <td>-0.420690</td>\n",
+       "      <td>-0.489655</td>\n",
+       "      <td>-0.331950</td>\n",
+       "      <td>T001</td>\n",
+       "      <td>2013-01-10 00:40:00</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>5 rows × 28 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "          0         1         2         3         4         5         6  \\\n",
+       "0 -0.235639 -0.242673 -0.328638 -0.177022 -0.352872 -0.192488 -0.331776   \n",
+       "1 -0.181712 -0.092614 -0.133803 -0.029308 -0.216882 -0.150235 -0.404206   \n",
+       "2 -0.038687 -0.141852 -0.039906 -0.071512 -0.348183 -0.208920 -0.355140   \n",
+       "3 -0.390387 -0.273154 -0.255869 -0.146542 -0.249707 -0.164319 -0.352804   \n",
+       "4 -0.366940 -0.268464 -0.258216 -0.160610 -0.378664 -0.417840 -0.490654   \n",
+       "\n",
+       "          7         8         9  ...        18        19        20        21  \\\n",
+       "0 -1.000000 -1.000000 -1.000000  ... -0.227586 -0.227586 -0.319728 -0.186207   \n",
+       "1 -0.999959 -0.999958 -0.999959  ... -0.186207 -0.117241 -0.115646 -0.062069   \n",
+       "2 -0.999911 -0.999917 -0.999916  ... -0.048276 -0.144828 -0.047619 -0.075862   \n",
+       "3 -0.999881 -0.999883 -0.999881  ... -0.393103 -0.282759 -0.238095 -0.131034   \n",
+       "4 -0.999849 -0.999849 -0.999846  ... -0.365517 -0.282759 -0.224490 -0.172414   \n",
+       "\n",
+       "         22        23        24        25  turbine_id           timestamp  \n",
+       "0 -0.369863 -0.186207 -0.337931 -0.261411        T001 2013-01-10 00:00:00  \n",
+       "1 -0.232877 -0.144828 -0.406897 -0.170124        T001 2013-01-10 00:10:00  \n",
+       "2 -0.356164 -0.227586 -0.365517 -0.165975        T001 2013-01-10 00:20:00  \n",
+       "3 -0.260274 -0.158621 -0.365517 -0.259336        T001 2013-01-10 00:30:00  \n",
+       "4 -0.397260 -0.420690 -0.489655 -0.331950        T001 2013-01-10 00:40:00  \n",
+       "\n",
+       "[5 rows x 28 columns]"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences\n",
+    "\n",
+    "* Input: X, readings (dataframe with turbine_id and timestamp)\n",
+    "* Output: X\n",
+    "* Effect: X has been converted to a 3d numpy array that contains 1 matrix of shape\n",
+    "  (window_size x num_signals) for each one of the target times."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'window_size': 24, 'cutoff_time': 'cutoff_time', 'time_index': 'timestamp'}"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pipeline._pipeline.get_hyperparameters()[\n",
+    "    'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1']"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "step = 8\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context.keys()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(51121, 28)"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['readings'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(353,)"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['y'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(353, 24, 26)"
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {
+    "scrolled": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[-0.66002345, -0.57327081, -0.64084507, -0.57796014, -0.6014068 ,\n",
+       "        -0.56103286, -0.55140187, -0.9928135 , -0.99291267, -0.99315058,\n",
+       "        -0.99304288, -0.99346346, -0.99352632, -0.99395333, -0.42553191,\n",
+       "        -0.41772152, -0.58730159, -0.35996294, -0.66896552, -0.57241379,\n",
+       "        -0.61904762, -0.5862069 , -0.60273973, -0.55862069, -0.55862069,\n",
+       "        -0.59751037],\n",
+       "       [-0.2989449 , -0.38569754, -0.48591549, -0.47713951, -0.66705744,\n",
+       "        -0.5915493 , -0.77336449, -0.99278389, -0.9928852 , -0.99312701,\n",
+       "        -0.99301988, -0.9934481 , -0.9935075 , -0.9939459 , -0.39361702,\n",
+       "        -0.40506329, -0.54285714, -0.35992014, -0.40689655, -0.42068966,\n",
+       "        -0.46938776, -0.48965517, -0.67123288, -0.5862069 , -0.83448276,\n",
+       "        -0.5560166 ],\n",
+       "       [-0.33645955, -0.40679953, -0.39906103, -0.38569754, -0.56154748,\n",
+       "        -0.43192488, -0.45560748, -0.99275498, -0.9928584 , -0.99310017,\n",
+       "        -0.99299431, -0.99342739, -0.99348349, -0.99392294, -0.29787234,\n",
+       "        -0.3164557 , -0.49206349, -0.35986854, -0.42068966, -0.43448276,\n",
+       "        -0.40136054, -0.43448276, -0.56164384, -0.47586207, -0.51724138,\n",
+       "        -0.46473029]])"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "context['X'][0][:3]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## keras.Sequential.LSTMTimeSeriesClassifier\n",
+    "\n",
+    "* Input: X, y\n",
+    "* Output: \n",
+    "* Effect: LSTM has been fitted."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "2022-01-18 07:34:41.001707: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA\n",
+      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+      "2022-01-18 07:34:41.024991: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fac7ea34260 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
+      "2022-01-18 07:34:41.025038: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version\n"
+     ]
+    }
+   ],
+   "source": [
+    "step = 9\n",
+    "context = pipeline.fit(**context, output_=step, start_=step)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.11"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/tutorials/pipelines/unstack_double_lstm_timeseries_classifier.ipynb b/tutorials/pipelines/unstack_double_lstm_timeseries_classifier.ipynb
deleted file mode 100644
index f539e89..0000000
--- a/tutorials/pipelines/unstack_double_lstm_timeseries_classifier.ipynb
+++ /dev/null
@@ -1,2481 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# unstack_double_lstm_timeseries_classifier"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from draco.demo import load_demo\n",
-    "\n",
-    "target_times, readings = load_demo()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pipeline_name = 'classes.unstack_double_lstm_timeseries_classifier'"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from draco.pipeline import DracoPipeline\n",
-    "\n",
-    "pipeline = DracoPipeline(pipeline_name)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['pandas.DataFrame.resample',\n",
-       " 'pandas.DataFrame.unstack',\n",
-       " 'pandas.DataFrame.pop',\n",
-       " 'pandas.DataFrame.pop',\n",
-       " 'sklearn.impute.SimpleImputer',\n",
-       " 'sklearn.preprocessing.MinMaxScaler',\n",
-       " 'pandas.DataFrame',\n",
-       " 'pandas.DataFrame.set',\n",
-       " 'pandas.DataFrame.set',\n",
-       " 'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences',\n",
-       " 'keras.Sequential.DoubleLSTMTimeSeriesClassifier']"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "pipeline.template['primitives']"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Step by Step execution"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Input Data"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>323.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S02</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>320.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S03</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>284.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S04</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>348.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S05</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>273.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id signal_id  timestamp  value\n",
-       "0       T001       S01 2013-01-10  323.0\n",
-       "1       T001       S02 2013-01-10  320.0\n",
-       "2       T001       S03 2013-01-10  284.0\n",
-       "3       T001       S04 2013-01-10  348.0\n",
-       "4       T001       S05 2013-01-10  273.0"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "readings.head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>cutoff_time</th>\n",
-       "      <th>target</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-12</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-13</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-14</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-15</td>\n",
-       "      <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-16</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id cutoff_time  target\n",
-       "0       T001  2013-01-12       0\n",
-       "1       T001  2013-01-13       0\n",
-       "2       T001  2013-01-14       0\n",
-       "3       T001  2013-01-15       1\n",
-       "4       T001  2013-01-16       0"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "target_times.head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Data Preparation (part of Draco Pipeline)\n",
-    "\n",
-    "* Input: target_times, readings, turbines\n",
-    "* Output: X, y, readings, turbines\n",
-    "* Effect: target_times has been split into X and y"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.resample\n",
-    "\n",
-    "* Input: readings\n",
-    "* Output: readings (resampled)\n",
-    "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
-    "  signal_id and timestamp have been set as a multi-index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "context = pipeline.fit(target_times, readings, output_=0)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 8,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"5\" valign=\"top\">T001</th>\n",
-       "      <th rowspan=\"5\" valign=\"top\">S01</th>\n",
-       "      <th>2013-01-10 00:00:00</th>\n",
-       "      <td>313.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 01:00:00</th>\n",
-       "      <td>197.500000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 02:00:00</th>\n",
-       "      <td>248.166667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 03:00:00</th>\n",
-       "      <td>253.166667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 04:00:00</th>\n",
-       "      <td>305.000000</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                                               value\n",
-       "turbine_id signal_id timestamp                      \n",
-       "T001       S01       2013-01-10 00:00:00  313.333333\n",
-       "                     2013-01-10 01:00:00  197.500000\n",
-       "                     2013-01-10 02:00:00  248.166667\n",
-       "                     2013-01-10 03:00:00  253.166667\n",
-       "                     2013-01-10 04:00:00  305.000000"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.unstack\n",
-    "\n",
-    "* Input: readings (resampled)\n",
-    "* Output: readings (unstacked)\n",
-    "* Effect: readings have been unstacked"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 1\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 28 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id           timestamp   value_S01   value_S02   value_S03  \\\n",
-       "0       T001 2013-01-10 00:00:00  313.333333  323.833333  336.000000   \n",
-       "1       T001 2013-01-10 01:00:00  197.500000  221.333333  216.000000   \n",
-       "2       T001 2013-01-10 02:00:00  248.166667  271.666667  277.500000   \n",
-       "3       T001 2013-01-10 03:00:00  253.166667  256.166667  242.666667   \n",
-       "4       T001 2013-01-10 04:00:00  305.000000  312.333333  346.166667   \n",
-       "\n",
-       "    value_S04   value_S05   value_S06   value_S07     value_S08  ...  \\\n",
-       "0  364.666667  286.500000  314.000000  243.166667  3.197980e+06  ...   \n",
-       "1  260.666667  206.833333  235.833333  186.666667  3.198221e+06  ...   \n",
-       "2  298.000000  233.666667  271.166667  216.333333  3.198448e+06  ...   \n",
-       "3  265.333333  211.666667  226.666667  181.000000  3.198691e+06  ...   \n",
-       "4  329.833333  280.666667  308.833333  271.833333  3.198978e+06  ...   \n",
-       "\n",
-       "   value_S17     value_S18  value_S19  value_S20  value_S21  value_S22  \\\n",
-       "0  10.383333  3.131958e+06  52.666667  54.333333  56.166667  61.000000   \n",
-       "1   8.666667  3.133668e+06  33.166667  37.000000  36.166667  43.666667   \n",
-       "2   8.833333  3.135413e+06  41.500000  45.666667  46.500000  49.666667   \n",
-       "3   8.433333  3.137001e+06  42.333333  42.833333  40.500000  44.166667   \n",
-       "4   9.083333  3.138843e+06  50.500000  51.166667  55.500000  53.666667   \n",
-       "\n",
-       "   value_S23  value_S24  value_S25   value_S26  \n",
-       "0  47.666667  52.666667  40.833333  357.333333  \n",
-       "1  34.500000  39.333333  31.166667  249.666667  \n",
-       "2  39.333333  45.500000  36.166667  297.666667  \n",
-       "3  35.333333  37.833333  30.333333  268.000000  \n",
-       "4  46.166667  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 28 columns]"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.pop\n",
-    "\n",
-    "* Input: readings (unstacked)\n",
-    "* Output: readings (without turbine_id), turbine_id\n",
-    "* Effect: turbine_id has been popped from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 2\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y', 'turbine_id'])"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0    T001\n",
-       "1    T001\n",
-       "2    T001\n",
-       "3    T001\n",
-       "4    T001\n",
-       "Name: turbine_id, dtype: object"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['turbine_id'].head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>value_S09</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>695143.166667</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>695403.666667</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>695656.500000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>695911.333333</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>696195.833333</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 27 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "            timestamp   value_S01   value_S02   value_S03   value_S04  \\\n",
-       "0 2013-01-10 00:00:00  313.333333  323.833333  336.000000  364.666667   \n",
-       "1 2013-01-10 01:00:00  197.500000  221.333333  216.000000  260.666667   \n",
-       "2 2013-01-10 02:00:00  248.166667  271.666667  277.500000  298.000000   \n",
-       "3 2013-01-10 03:00:00  253.166667  256.166667  242.666667  265.333333   \n",
-       "4 2013-01-10 04:00:00  305.000000  312.333333  346.166667  329.833333   \n",
-       "\n",
-       "    value_S05   value_S06   value_S07     value_S08      value_S09  ...  \\\n",
-       "0  286.500000  314.000000  243.166667  3.197980e+06  695143.166667  ...   \n",
-       "1  206.833333  235.833333  186.666667  3.198221e+06  695403.666667  ...   \n",
-       "2  233.666667  271.166667  216.333333  3.198448e+06  695656.500000  ...   \n",
-       "3  211.666667  226.666667  181.000000  3.198691e+06  695911.333333  ...   \n",
-       "4  280.666667  308.833333  271.833333  3.198978e+06  696195.833333  ...   \n",
-       "\n",
-       "   value_S17     value_S18  value_S19  value_S20  value_S21  value_S22  \\\n",
-       "0  10.383333  3.131958e+06  52.666667  54.333333  56.166667  61.000000   \n",
-       "1   8.666667  3.133668e+06  33.166667  37.000000  36.166667  43.666667   \n",
-       "2   8.833333  3.135413e+06  41.500000  45.666667  46.500000  49.666667   \n",
-       "3   8.433333  3.137001e+06  42.333333  42.833333  40.500000  44.166667   \n",
-       "4   9.083333  3.138843e+06  50.500000  51.166667  55.500000  53.666667   \n",
-       "\n",
-       "   value_S23  value_S24  value_S25   value_S26  \n",
-       "0  47.666667  52.666667  40.833333  357.333333  \n",
-       "1  34.500000  39.333333  31.166667  249.666667  \n",
-       "2  39.333333  45.500000  36.166667  297.666667  \n",
-       "3  35.333333  37.833333  30.333333  268.000000  \n",
-       "4  46.166667  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 27 columns]"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.pop\n",
-    "\n",
-    "* Input: readings (without turbine_id)\n",
-    "* Output: readings (without timestamp), timestamp\n",
-    "* Effect: timestamp has been popped from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 3\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'X', 'y', 'timestamp'])"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0   2013-01-10 00:00:00\n",
-       "1   2013-01-10 01:00:00\n",
-       "2   2013-01-10 02:00:00\n",
-       "3   2013-01-10 03:00:00\n",
-       "4   2013-01-10 04:00:00\n",
-       "Name: timestamp, dtype: datetime64[ns]"
-      ]
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['timestamp'].head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>value_S09</th>\n",
-       "      <th>value_S10</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>695143.166667</td>\n",
-       "      <td>3.348384e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>695403.666667</td>\n",
-       "      <td>3.348651e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>695656.500000</td>\n",
-       "      <td>3.348910e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>695911.333333</td>\n",
-       "      <td>3.349157e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>696195.833333</td>\n",
-       "      <td>3.349452e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 26 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "    value_S01   value_S02   value_S03   value_S04   value_S05   value_S06  \\\n",
-       "0  313.333333  323.833333  336.000000  364.666667  286.500000  314.000000   \n",
-       "1  197.500000  221.333333  216.000000  260.666667  206.833333  235.833333   \n",
-       "2  248.166667  271.666667  277.500000  298.000000  233.666667  271.166667   \n",
-       "3  253.166667  256.166667  242.666667  265.333333  211.666667  226.666667   \n",
-       "4  305.000000  312.333333  346.166667  329.833333  280.666667  308.833333   \n",
-       "\n",
-       "    value_S07     value_S08      value_S09     value_S10  ...  value_S17  \\\n",
-       "0  243.166667  3.197980e+06  695143.166667  3.348384e+06  ...  10.383333   \n",
-       "1  186.666667  3.198221e+06  695403.666667  3.348651e+06  ...   8.666667   \n",
-       "2  216.333333  3.198448e+06  695656.500000  3.348910e+06  ...   8.833333   \n",
-       "3  181.000000  3.198691e+06  695911.333333  3.349157e+06  ...   8.433333   \n",
-       "4  271.833333  3.198978e+06  696195.833333  3.349452e+06  ...   9.083333   \n",
-       "\n",
-       "      value_S18  value_S19  value_S20  value_S21  value_S22  value_S23  \\\n",
-       "0  3.131958e+06  52.666667  54.333333  56.166667  61.000000  47.666667   \n",
-       "1  3.133668e+06  33.166667  37.000000  36.166667  43.666667  34.500000   \n",
-       "2  3.135413e+06  41.500000  45.666667  46.500000  49.666667  39.333333   \n",
-       "3  3.137001e+06  42.333333  42.833333  40.500000  44.166667  35.333333   \n",
-       "4  3.138843e+06  50.500000  51.166667  55.500000  53.666667  46.166667   \n",
-       "\n",
-       "   value_S24  value_S25   value_S26  \n",
-       "0  52.666667  40.833333  357.333333  \n",
-       "1  39.333333  31.166667  249.666667  \n",
-       "2  45.500000  36.166667  297.666667  \n",
-       "3  37.833333  30.333333  268.000000  \n",
-       "4  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 26 columns]"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## sklearn.impute.SimpleImputer\n",
-    "\n",
-    "* Input: readings (unstacked, no turbine_id, no timestamp)\n",
-    "* Output: readings (imputed, numpy array)\n",
-    "* Effect: readings have been imputed and converted to numpy array"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 4\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[3.13333333e+02, 3.23833333e+02, 3.36000000e+02, 3.64666667e+02,\n",
-       "        2.86500000e+02, 3.14000000e+02, 2.43166667e+02, 3.19798000e+06,\n",
-       "        6.95143167e+05, 3.34838383e+06, 3.43692150e+06, 3.32248667e+06,\n",
-       "        3.35809000e+06, 3.22390150e+06, 7.95000000e+00, 5.85000000e+00,\n",
-       "        1.03833333e+01, 3.13195833e+06, 5.26666667e+01, 5.43333333e+01,\n",
-       "        5.61666667e+01, 6.10000000e+01, 4.76666667e+01, 5.26666667e+01,\n",
-       "        4.08333333e+01, 3.57333333e+02],\n",
-       "       [1.97500000e+02, 2.21333333e+02, 2.16000000e+02, 2.60666667e+02,\n",
-       "        2.06833333e+02, 2.35833333e+02, 1.86666667e+02, 3.19822067e+06,\n",
-       "        6.95403667e+05, 3.34865117e+06, 3.43722283e+06, 3.32272200e+06,\n",
-       "        3.35834000e+06, 3.22409567e+06, 6.83333333e+00, 5.15000000e+00,\n",
-       "        8.66666667e+00, 3.13366817e+06, 3.31666667e+01, 3.70000000e+01,\n",
-       "        3.61666667e+01, 4.36666667e+01, 3.45000000e+01, 3.93333333e+01,\n",
-       "        3.11666667e+01, 2.49666667e+02],\n",
-       "       [2.48166667e+02, 2.71666667e+02, 2.77500000e+02, 2.98000000e+02,\n",
-       "        2.33666667e+02, 2.71166667e+02, 2.16333333e+02, 3.19844767e+06,\n",
-       "        6.95656500e+05, 3.34890967e+06, 3.43751900e+06, 3.32295950e+06,\n",
-       "        3.35862067e+06, 3.22432333e+06, 7.11666667e+00, 5.56666667e+00,\n",
-       "        8.83333333e+00, 3.13541283e+06, 4.15000000e+01, 4.56666667e+01,\n",
-       "        4.65000000e+01, 4.96666667e+01, 3.93333333e+01, 4.55000000e+01,\n",
-       "        3.61666667e+01, 2.97666667e+02],\n",
-       "       [2.53166667e+02, 2.56166667e+02, 2.42666667e+02, 2.65333333e+02,\n",
-       "        2.11666667e+02, 2.26666667e+02, 1.81000000e+02, 3.19869117e+06,\n",
-       "        6.95911333e+05, 3.34915717e+06, 3.43778050e+06, 3.32316850e+06,\n",
-       "        3.35884883e+06, 3.22450217e+06, 6.71666667e+00, 5.16666667e+00,\n",
-       "        8.43333333e+00, 3.13700133e+06, 4.23333333e+01, 4.28333333e+01,\n",
-       "        4.05000000e+01, 4.41666667e+01, 3.53333333e+01, 3.78333333e+01,\n",
-       "        3.03333333e+01, 2.68000000e+02],\n",
-       "       [3.05000000e+02, 3.12333333e+02, 3.46166667e+02, 3.29833333e+02,\n",
-       "        2.80666667e+02, 3.08833333e+02, 2.71833333e+02, 3.19897850e+06,\n",
-       "        6.96195833e+05, 3.34945200e+06, 3.43807767e+06, 3.32340933e+06,\n",
-       "        3.35910983e+06, 3.22471400e+06, 7.20000000e+00, 5.28333333e+00,\n",
-       "        9.08333333e+00, 3.13884333e+06, 5.05000000e+01, 5.11666667e+01,\n",
-       "        5.55000000e+01, 5.36666667e+01, 4.61666667e+01, 4.96666667e+01,\n",
-       "        4.11666667e+01, 3.41833333e+02]])"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'][0:5]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## sklearn.preprocessing.MinMaxScaler\n",
-    "\n",
-    "* Input: (imputed, array)\n",
-    "* Output: readings (scaled, array)\n",
-    "* Effect: readings have been scaled to [-1, 1] range"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 5\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 25,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[-0.26126126, -0.23706897, -0.20870076, -0.14106583, -0.32328767,\n",
-       "        -0.25969448, -0.42198789, -1.        , -1.        , -1.        ,\n",
-       "        -1.        , -1.        , -1.        , -1.        , -0.11007463,\n",
-       "        -0.16824645, -0.10424155, -0.37397741, -0.25233645, -0.22716628,\n",
-       "        -0.20140515, -0.13481829, -0.32239156, -0.25380117, -0.4182243 ,\n",
-       "        -0.25697453],\n",
-       "       [-0.53349001, -0.47805643, -0.49088771, -0.38557994, -0.51037182,\n",
-       "        -0.44339992, -0.55438391, -0.99983031, -0.99982547, -0.99982499,\n",
-       "        -0.99980741, -0.9998428 , -0.99983779, -0.99986887, -0.23507463,\n",
-       "        -0.26777251, -0.25233645, -0.37363511, -0.52570093, -0.470726  ,\n",
-       "        -0.4824356 , -0.37866354, -0.50762016, -0.44093567, -0.55373832,\n",
-       "        -0.48085254],\n",
-       "       [-0.41441441, -0.35971787, -0.3462669 , -0.29780564, -0.44735812,\n",
-       "        -0.36036036, -0.48486624, -0.99967026, -0.99965608, -0.99965576,\n",
-       "        -0.99961813, -0.99968416, -0.99965569, -0.99971512, -0.20335821,\n",
-       "        -0.20853081, -0.2379583 , -0.37328583, -0.4088785 , -0.34894614,\n",
-       "        -0.33723653, -0.29425557, -0.43962485, -0.35438596, -0.48364486,\n",
-       "        -0.38104315],\n",
-       "       [-0.40266353, -0.39615987, -0.4281795 , -0.37460815, -0.49902153,\n",
-       "        -0.4649432 , -0.56766257, -0.99949857, -0.99948535, -0.99949373,\n",
-       "        -0.999451  , -0.99954455, -0.99950765, -0.99959435, -0.24813433,\n",
-       "        -0.26540284, -0.27246585, -0.37296782, -0.39719626, -0.38875878,\n",
-       "        -0.42154567, -0.37162954, -0.49589683, -0.4619883 , -0.56542056,\n",
-       "        -0.4427309 ],\n",
-       "       [-0.28084606, -0.26410658, -0.18479326, -0.22296238, -0.3369863 ,\n",
-       "        -0.27183705, -0.35481351, -0.99929598, -0.99929474, -0.99930071,\n",
-       "        -0.99926107, -0.99938368, -0.99933831, -0.9994513 , -0.19402985,\n",
-       "        -0.24881517, -0.21639109, -0.37259906, -0.28271028, -0.27166276,\n",
-       "        -0.21077283, -0.23798359, -0.34349355, -0.29590643, -0.4135514 ,\n",
-       "        -0.28920464]])"
-      ]
-     },
-     "execution_count": 26,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'][0:5]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame\n",
-    "\n",
-    "* Input: readings (scaled, array)\n",
-    "* Output: readings (dataframe)\n",
-    "* Effect: readings have been converted into a dataframe"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 6\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 28,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 28,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>16</th>\n",
-       "      <th>17</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.104242</td>\n",
-       "      <td>-0.373977</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.373635</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.237958</td>\n",
-       "      <td>-0.373286</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.272466</td>\n",
-       "      <td>-0.372968</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.216391</td>\n",
-       "      <td>-0.372599</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 26 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "         0         1         2         3         4         5         6   \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "         7         8         9   ...        16        17        18        19  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.104242 -0.373977 -0.252336 -0.227166   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.252336 -0.373635 -0.525701 -0.470726   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.237958 -0.373286 -0.408879 -0.348946   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.272466 -0.372968 -0.397196 -0.388759   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.216391 -0.372599 -0.282710 -0.271663   \n",
-       "\n",
-       "         20        21        22        23        24        25  \n",
-       "0 -0.201405 -0.134818 -0.322392 -0.253801 -0.418224 -0.256975  \n",
-       "1 -0.482436 -0.378664 -0.507620 -0.440936 -0.553738 -0.480853  \n",
-       "2 -0.337237 -0.294256 -0.439625 -0.354386 -0.483645 -0.381043  \n",
-       "3 -0.421546 -0.371630 -0.495897 -0.461988 -0.565421 -0.442731  \n",
-       "4 -0.210773 -0.237984 -0.343494 -0.295906 -0.413551 -0.289205  \n",
-       "\n",
-       "[5 rows x 26 columns]"
-      ]
-     },
-     "execution_count": 29,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.set\n",
-    "\n",
-    "* Input: readings (dataframe)\n",
-    "* Output: readings (dataframe with turbine_id)\n",
-    "* Effect: turbine_id has been set as a readings column"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 30,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 7\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 31,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 31,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 32,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>17</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "      <th>turbine_id</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373977</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373635</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373286</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.372968</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.372599</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 27 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "          0         1         2         3         4         5         6  \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "          7         8         9  ...        17        18        19        20  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.373977 -0.252336 -0.227166 -0.201405   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.373635 -0.525701 -0.470726 -0.482436   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.373286 -0.408879 -0.348946 -0.337237   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.372968 -0.397196 -0.388759 -0.421546   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.372599 -0.282710 -0.271663 -0.210773   \n",
-       "\n",
-       "         21        22        23        24        25  turbine_id  \n",
-       "0 -0.134818 -0.322392 -0.253801 -0.418224 -0.256975        T001  \n",
-       "1 -0.378664 -0.507620 -0.440936 -0.553738 -0.480853        T001  \n",
-       "2 -0.294256 -0.439625 -0.354386 -0.483645 -0.381043        T001  \n",
-       "3 -0.371630 -0.495897 -0.461988 -0.565421 -0.442731        T001  \n",
-       "4 -0.237984 -0.343494 -0.295906 -0.413551 -0.289205        T001  \n",
-       "\n",
-       "[5 rows x 27 columns]"
-      ]
-     },
-     "execution_count": 32,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.set\n",
-    "\n",
-    "* Input: readings (dataframe with turbine_id)\n",
-    "* Output: readings (dataframe with turbine_id and timestamp)\n",
-    "* Effect: timestamp has been set as a readings column"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 33,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 8\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 34,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 28 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "          0         1         2         3         4         5         6  \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "          7         8         9  ...        18        19        20        21  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.252336 -0.227166 -0.201405 -0.134818   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.525701 -0.470726 -0.482436 -0.378664   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.408879 -0.348946 -0.337237 -0.294256   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.397196 -0.388759 -0.421546 -0.371630   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.282710 -0.271663 -0.210773 -0.237984   \n",
-       "\n",
-       "         22        23        24        25  turbine_id           timestamp  \n",
-       "0 -0.322392 -0.253801 -0.418224 -0.256975        T001 2013-01-10 00:00:00  \n",
-       "1 -0.507620 -0.440936 -0.553738 -0.480853        T001 2013-01-10 01:00:00  \n",
-       "2 -0.439625 -0.354386 -0.483645 -0.381043        T001 2013-01-10 02:00:00  \n",
-       "3 -0.495897 -0.461988 -0.565421 -0.442731        T001 2013-01-10 03:00:00  \n",
-       "4 -0.343494 -0.295906 -0.413551 -0.289205        T001 2013-01-10 04:00:00  \n",
-       "\n",
-       "[5 rows x 28 columns]"
-      ]
-     },
-     "execution_count": 35,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences\n",
-    "\n",
-    "* Input: X, readings (dataframe with turbine_id and timestamp)\n",
-    "* Output: X\n",
-    "* Effect: X has been converted to a 3d numpy array that contains 1 matrix of shape\n",
-    "  (window_size x num_signals) for each one of the target times."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 36,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'window_size': 24, 'cutoff_time': 'cutoff_time', 'time_index': 'timestamp'}"
-      ]
-     },
-     "execution_count": 36,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "pipeline._pipeline.get_hyperparameters()[\n",
-    "    'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1']"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 37,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 9\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 38,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 38,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 39,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(8521, 28)"
-      ]
-     },
-     "execution_count": 39,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 40,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(353,)"
-      ]
-     },
-     "execution_count": 40,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['y'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 41,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(353, 24, 26)"
-      ]
-     },
-     "execution_count": 41,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['X'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 42,
-   "metadata": {
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[-0.58793576, -0.60305643, -0.63981971, -0.61481191, -0.69823875,\n",
-       "        -0.65021543, -0.68912322, -0.99436914, -0.99439755, -0.99454249,\n",
-       "        -0.99446788, -0.99476185, -0.99490997, -0.99529511, -0.34701493,\n",
-       "        -0.33886256, -0.33860532, -0.36301186, -0.57943925, -0.59250585,\n",
-       "        -0.6323185 , -0.60609613, -0.69284877, -0.64444444, -0.68691589,\n",
-       "        -0.63853752],\n",
-       "       [-0.56600078, -0.5846395 , -0.63002156, -0.61559561, -0.70880626,\n",
-       "        -0.66392479, -0.69732474, -0.9942427 , -0.99427986, -0.9944408 ,\n",
-       "        -0.99436498, -0.99468147, -0.99482011, -0.99521249, -0.33955224,\n",
-       "        -0.31516588, -0.38892883, -0.36280656, -0.55841121, -0.57611241,\n",
-       "        -0.62295082, -0.61078546, -0.70222743, -0.65847953, -0.69392523,\n",
-       "        -0.63645815],\n",
-       "       [-0.64081473, -0.64184953, -0.67038997, -0.63597179, -0.71350294,\n",
-       "        -0.65844105, -0.66764304, -0.99412236, -0.99416864, -0.99434228,\n",
-       "        -0.99426059, -0.99459663, -0.99472365, -0.99511795, -0.34328358,\n",
-       "        -0.30094787, -0.36304817, -0.36259859, -0.63317757, -0.6323185 ,\n",
-       "        -0.66042155, -0.62954279, -0.70926143, -0.65380117, -0.66588785,\n",
-       "        -0.66002426],\n",
-       "       [-0.73678026, -0.72139498, -0.72800314, -0.69239812, -0.71350294,\n",
-       "        -0.68233451, -0.69732474, -0.99403811, -0.99408512, -0.9942623 ,\n",
-       "        -0.99417111, -0.99451525, -0.99463206, -0.9950315 , -0.40671642,\n",
-       "        -0.36018957, -0.44644141, -0.36242395, -0.72897196, -0.71194379,\n",
-       "        -0.71896956, -0.68347011, -0.70926143, -0.6748538 , -0.69392523,\n",
-       "        -0.71027552],\n",
-       "       [-0.75401488, -0.74333856, -0.75112679, -0.71590909, -0.76555773,\n",
-       "        -0.73599687, -0.75278266, -0.99395808, -0.99400684, -0.99419094,\n",
-       "        -0.99409367, -0.99444556, -0.99455517, -0.99495418, -0.43656716,\n",
-       "        -0.3957346 , -0.465133  , -0.36226933, -0.7453271 , -0.735363  ,\n",
-       "        -0.74004684, -0.70926143, -0.76084408, -0.73099415, -0.75      ,\n",
-       "        -0.7463178 ],\n",
-       "       [-0.79866823, -0.76684953, -0.7558299 , -0.72688088, -0.76125245,\n",
-       "        -0.75714845, -0.78363601, -0.99389098, -0.99393583, -0.99411958,\n",
-       "        -0.99401538, -0.99437709, -0.99448423, -0.99489036, -0.43843284,\n",
-       "        -0.37914692, -0.49388929, -0.36212623, -0.78971963, -0.75644028,\n",
-       "        -0.7470726 , -0.72098476, -0.75615475, -0.7497076 , -0.78037383,\n",
-       "        -0.76572518],\n",
-       "       [-0.84919702, -0.83855799, -0.82245738, -0.78134796, -0.75225049,\n",
-       "        -0.70661966, -0.65787932, -0.99384186, -0.99388279, -0.9940635 ,\n",
-       "        -0.99395157, -0.9943113 , -0.99441264, -0.99481202, -0.51679104,\n",
-       "        -0.50473934, -0.53414809, -0.36199904, -0.8411215 , -0.83138173,\n",
-       "        -0.81264637, -0.77256741, -0.74677608, -0.70292398, -0.65654206,\n",
-       "        -0.77438919],\n",
-       "       [-0.69134352, -0.705721  , -0.73584166, -0.70297806, -0.75225049,\n",
-       "        -0.72659616, -0.71724273, -0.99377229, -0.99381646, -0.99400032,\n",
-       "        -0.99387925, -0.99423682, -0.99433003, -0.99471624, -0.43843284,\n",
-       "        -0.40521327, -0.48094896, -0.36184615, -0.68457944, -0.69555035,\n",
-       "        -0.72599532, -0.6975381 , -0.74677608, -0.71929825, -0.71261682,\n",
-       "        -0.71893953],\n",
-       "       [-0.84488837, -0.82915361, -0.83578287, -0.81896552, -0.86105675,\n",
-       "        -0.8613396 , -0.86330795, -0.99369779, -0.99374656, -0.99393715,\n",
-       "        -0.99381182, -0.99418494, -0.99427639, -0.99466379, -0.49253731,\n",
-       "        -0.48104265, -0.51545651, -0.36172116, -0.8364486 , -0.81967213,\n",
-       "        -0.82435597, -0.81008206, -0.85463072, -0.85497076, -0.86214953,\n",
-       "        -0.84889967],\n",
-       "       [-0.77908343, -0.78761755, -0.78757594, -0.78918495, -0.82348337,\n",
-       "        -0.82491187, -0.85276313, -0.99365725, -0.99370625, -0.99389819,\n",
-       "        -0.99377113, -0.99415254, -0.99424222, -0.99463329, -0.52798507,\n",
-       "        -0.6042654 , -0.51545651, -0.36164779, -0.77336449, -0.77985948,\n",
-       "        -0.78220141, -0.78429074, -0.86635404, -0.82222222, -0.85046729,\n",
-       "        -0.81562987],\n",
-       "       [-0.70544458, -0.64733542, -0.64844209, -0.61833856, -0.6481409 ,\n",
-       "        -0.66392479, -0.71646163, -0.99356747, -0.99360832, -0.99380327,\n",
-       "        -0.99367558, -0.99407272, -0.99415647, -0.99456035, -0.36567164,\n",
-       "        -0.4549763 , -0.34291876, -0.36146698, -0.70560748, -0.63934426,\n",
-       "        -0.63934426, -0.62016413, -0.64830012, -0.65847953, -0.72663551,\n",
-       "        -0.66868827],\n",
-       "       [-0.70387779, -0.67202194, -0.69508132, -0.72413793, -0.73228963,\n",
-       "        -0.72816295, -0.72310096, -0.99348204, -0.99351955, -0.99372023,\n",
-       "        -0.99359367, -0.99399256, -0.99407882, -0.99449203, -0.38432836,\n",
-       "        -0.58530806, -0.33141625, -0.36130226, -0.69392523, -0.66042155,\n",
-       "        -0.68384075, -0.71629543, -0.72801876, -0.72163743, -0.72196262,\n",
-       "        -0.7113152 ],\n",
-       "       [-0.8515472 , -0.81073668, -0.776602  , -0.76724138, -0.78277886,\n",
-       "        -0.75832354, -0.74262839, -0.99341682, -0.99344607, -0.99364669,\n",
-       "        -0.99352762, -0.99392743, -0.99401037, -0.99441763, -0.44029851,\n",
-       "        -0.5521327 , -0.38461538, -0.36116102, -0.84345794, -0.80327869,\n",
-       "        -0.76814988, -0.76084408, -0.77725674, -0.75204678, -0.73831776,\n",
-       "        -0.7865188 ],\n",
-       "       [-0.80258519, -0.83659875, -0.83499902, -0.79741379, -0.80821918,\n",
-       "        -0.81629456, -0.79379028, -0.99336347, -0.99339091, -0.99358745,\n",
-       "        -0.99346147, -0.9938642 , -0.99394733, -0.99434605, -0.44962687,\n",
-       "        -0.6563981 , -0.34579439, -0.36103606, -0.79439252, -0.82669789,\n",
-       "        -0.82669789, -0.78898007, -0.80304807, -0.81052632, -0.79205607,\n",
-       "        -0.81632299],\n",
-       "       [-0.83313749, -0.87539185, -0.90241035, -0.88440439, -0.86771037,\n",
-       "        -0.87935762, -0.87580551, -0.99331764, -0.99335898, -0.99355602,\n",
-       "        -0.99342259, -0.99382267, -0.99390959, -0.99430418, -0.54291045,\n",
-       "        -0.72274882, -0.42918763, -0.36096002, -0.82943925, -0.87119438,\n",
-       "        -0.89461358, -0.87573271, -0.86166471, -0.87134503, -0.87383178,\n",
-       "        -0.88078323],\n",
-       "       [-0.56678418, -0.60031348, -0.64295512, -0.78409091, -0.76164384,\n",
-       "        -0.78535057, -0.82464362, -0.99321481, -0.99327557, -0.99349034,\n",
-       "        -0.99337881, -0.9937915 , -0.99387347, -0.99427367, -0.32835821,\n",
-       "        -0.47630332, -0.25808771, -0.36084678, -0.56074766, -0.59250585,\n",
-       "        -0.6323185 , -0.77960141, -0.84759672, -0.78947368, -0.8364486 ,\n",
-       "        -0.72621729],\n",
-       "       [-0.77007442, -0.81230408, -0.83186361, -0.85540752, -0.85870841,\n",
-       "        -0.86486486, -0.847686  , -0.99311634, -0.99319338, -0.99341516,\n",
-       "        -0.99332651, -0.99374196, -0.99381551, -0.99422246, -0.46641791,\n",
-       "        -0.65165877, -0.39324227, -0.36071245, -0.76168224, -0.80093677,\n",
-       "        -0.82201405, -0.84759672, -0.85463072, -0.85730994, -0.84579439,\n",
-       "        -0.83780974],\n",
-       "       [-0.87622405, -0.92163009, -0.91377621, -0.89224138, -0.84540117,\n",
-       "        -0.83431257, -0.82112869, -0.99306816, -0.99315821, -0.99338734,\n",
-       "        -0.99329935, -0.99370611, -0.99377885, -0.9941789 , -0.55783582,\n",
-       "        -0.65402844, -0.50970525, -0.36064058, -0.86682243, -0.91334895,\n",
-       "        -0.90632319, -0.88745604, -0.84056272, -0.82923977, -0.81775701,\n",
-       "        -0.87731762],\n",
-       "       [-0.82843713, -0.83111285, -0.84166177, -0.8322884 , -0.84579256,\n",
-       "        -0.8515472 , -0.86057411, -0.99302656, -0.99312426, -0.99335155,\n",
-       "        -0.99325919, -0.99365991, -0.99373278, -0.99413129, -0.50559701,\n",
-       "        -0.53791469, -0.52120776, -0.36055736, -0.82242991, -0.82201405,\n",
-       "        -0.83138173, -0.82415006, -0.84056272, -0.84327485, -0.85747664,\n",
-       "        -0.84508751],\n",
-       "       [-0.74539757, -0.73824451, -0.76484421, -0.72100313, -0.73228963,\n",
-       "        -0.70975323, -0.739504  , -0.99296569, -0.99306553, -0.99329699,\n",
-       "        -0.9932005 , -0.99360224, -0.99367493, -0.99407862, -0.45149254,\n",
-       "        -0.46208531, -0.48382459, -0.36044105, -0.73598131, -0.73067916,\n",
-       "        -0.75644028, -0.71629543, -0.72801876, -0.70526316, -0.73831776,\n",
-       "        -0.73696067],\n",
-       "       [-0.40814728, -0.4596395 , -0.51087596, -0.46316614, -0.54598826,\n",
-       "        -0.50607129, -0.57039641, -0.99283748, -0.99294147, -0.9931881 ,\n",
-       "        -0.99308418, -0.99349681, -0.99356041, -0.99398047, -0.30597015,\n",
-       "        -0.29383886, -0.34867002, -0.36020709, -0.46728972, -0.470726  ,\n",
-       "        -0.5175644 , -0.48651817, -0.55685815, -0.51812865, -0.59579439,\n",
-       "        -0.5179345 ],\n",
-       "       [-0.47591069, -0.45219436, -0.48579267, -0.48981191, -0.57847358,\n",
-       "        -0.54876616, -0.61882445, -0.99268659, -0.99280044, -0.99306033,\n",
-       "        -0.99295359, -0.99338192, -0.99344287, -0.9938794 , -0.30223881,\n",
-       "        -0.33649289, -0.32278936, -0.35994787, -0.49065421, -0.46370023,\n",
-       "        -0.4941452 , -0.49589683, -0.58264947, -0.55321637, -0.62850467,\n",
-       "        -0.53110379],\n",
-       "       [-0.26792009, -0.27115987, -0.30080345, -0.24412226, -0.34246575,\n",
-       "        -0.30434783, -0.40285101, -0.99250927, -0.99261854, -0.99288914,\n",
-       "        -0.99278188, -0.99322495, -0.99327569, -0.9937324 , -0.22947761,\n",
-       "        -0.28909953, -0.26096334, -0.35960139, -0.33878505, -0.29976581,\n",
-       "        -0.32786885, -0.2919109 , -0.38100821, -0.32865497, -0.42523364,\n",
-       "        -0.3394559 ],\n",
-       "       [-0.31374853, -0.26449843, -0.2941407 , -0.23315047, -0.36516634,\n",
-       "        -0.35957697, -0.44112478, -0.9923035 , -0.99241264, -0.99269787,\n",
-       "        -0.99258055, -0.99304482, -0.99309553, -0.99356987, -0.2108209 ,\n",
-       "        -0.21563981, -0.23652049, -0.35921021, -0.30607477, -0.26229508,\n",
-       "        -0.29039813, -0.23563892, -0.35990621, -0.35204678, -0.43925234,\n",
-       "        -0.32004852]])"
-      ]
-     },
-     "execution_count": 42,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['X'][0]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## keras.Sequential.DoubleLSTMTimeSeriesClassifier\n",
-    "\n",
-    "* Input: X, y\n",
-    "* Output: \n",
-    "* Effect: DoubleLSTM has been fitted."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 43,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 10\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/tutorials/pipelines/unstack_lstm_timeseries_classifier.ipynb b/tutorials/pipelines/unstack_lstm_timeseries_classifier.ipynb
deleted file mode 100644
index 1a10480..0000000
--- a/tutorials/pipelines/unstack_lstm_timeseries_classifier.ipynb
+++ /dev/null
@@ -1,2355 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# unstack_lstm_timeseries_classifier"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from draco.demo import load_demo\n",
-    "\n",
-    "target_times, readings = load_demo()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pipeline_name = 'classes.unstack_lstm_timeseries_classifier'"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from draco.pipeline import DracoPipeline\n",
-    "\n",
-    "pipeline = DracoPipeline(pipeline_name)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['pandas.DataFrame.resample',\n",
-       " 'pandas.DataFrame.unstack',\n",
-       " 'pandas.DataFrame.pop',\n",
-       " 'pandas.DataFrame.pop',\n",
-       " 'sklearn.impute.SimpleImputer',\n",
-       " 'sklearn.preprocessing.MinMaxScaler',\n",
-       " 'pandas.DataFrame',\n",
-       " 'pandas.DataFrame.set',\n",
-       " 'pandas.DataFrame.set',\n",
-       " 'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences',\n",
-       " 'keras.Sequential.LSTMTimeSeriesClassifier']"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "pipeline.template['primitives']"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Step by Step execution"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Input Data"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S01</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>323.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S02</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>320.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S03</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>284.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S04</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>348.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>S05</td>\n",
-       "      <td>2013-01-10</td>\n",
-       "      <td>273.0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id signal_id  timestamp  value\n",
-       "0       T001       S01 2013-01-10  323.0\n",
-       "1       T001       S02 2013-01-10  320.0\n",
-       "2       T001       S03 2013-01-10  284.0\n",
-       "3       T001       S04 2013-01-10  348.0\n",
-       "4       T001       S05 2013-01-10  273.0"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "readings.head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>cutoff_time</th>\n",
-       "      <th>target</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-12</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-13</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-14</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-15</td>\n",
-       "      <td>1</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-16</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id cutoff_time  target\n",
-       "0       T001  2013-01-12       0\n",
-       "1       T001  2013-01-13       0\n",
-       "2       T001  2013-01-14       0\n",
-       "3       T001  2013-01-15       1\n",
-       "4       T001  2013-01-16       0"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "target_times.head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Data Preparation (part of Draco Pipeline)\n",
-    "\n",
-    "* Input: target_times, readings, turbines\n",
-    "* Output: X, y, readings, turbines\n",
-    "* Effect: target_times has been split into X and y"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.resample\n",
-    "\n",
-    "* Input: readings\n",
-    "* Output: readings (resampled)\n",
-    "* Effect: readings have been resampled to the indicated resample rule and turbine_id,\n",
-    "  signal_id and timestamp have been set as a multi-index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "context = pipeline.fit(target_times, readings, output_=0)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 8,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>value</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>signal_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"5\" valign=\"top\">T001</th>\n",
-       "      <th rowspan=\"5\" valign=\"top\">S01</th>\n",
-       "      <th>2013-01-10 00:00:00</th>\n",
-       "      <td>313.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 01:00:00</th>\n",
-       "      <td>197.500000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 02:00:00</th>\n",
-       "      <td>248.166667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 03:00:00</th>\n",
-       "      <td>253.166667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2013-01-10 04:00:00</th>\n",
-       "      <td>305.000000</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                                               value\n",
-       "turbine_id signal_id timestamp                      \n",
-       "T001       S01       2013-01-10 00:00:00  313.333333\n",
-       "                     2013-01-10 01:00:00  197.500000\n",
-       "                     2013-01-10 02:00:00  248.166667\n",
-       "                     2013-01-10 03:00:00  253.166667\n",
-       "                     2013-01-10 04:00:00  305.000000"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.unstack\n",
-    "\n",
-    "* Input: readings (resampled)\n",
-    "* Output: readings (unstacked)\n",
-    "* Effect: readings have been unstacked"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 1\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 28 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "  turbine_id           timestamp   value_S01   value_S02   value_S03  \\\n",
-       "0       T001 2013-01-10 00:00:00  313.333333  323.833333  336.000000   \n",
-       "1       T001 2013-01-10 01:00:00  197.500000  221.333333  216.000000   \n",
-       "2       T001 2013-01-10 02:00:00  248.166667  271.666667  277.500000   \n",
-       "3       T001 2013-01-10 03:00:00  253.166667  256.166667  242.666667   \n",
-       "4       T001 2013-01-10 04:00:00  305.000000  312.333333  346.166667   \n",
-       "\n",
-       "    value_S04   value_S05   value_S06   value_S07     value_S08  ...  \\\n",
-       "0  364.666667  286.500000  314.000000  243.166667  3.197980e+06  ...   \n",
-       "1  260.666667  206.833333  235.833333  186.666667  3.198221e+06  ...   \n",
-       "2  298.000000  233.666667  271.166667  216.333333  3.198448e+06  ...   \n",
-       "3  265.333333  211.666667  226.666667  181.000000  3.198691e+06  ...   \n",
-       "4  329.833333  280.666667  308.833333  271.833333  3.198978e+06  ...   \n",
-       "\n",
-       "   value_S17     value_S18  value_S19  value_S20  value_S21  value_S22  \\\n",
-       "0  10.383333  3.131958e+06  52.666667  54.333333  56.166667  61.000000   \n",
-       "1   8.666667  3.133668e+06  33.166667  37.000000  36.166667  43.666667   \n",
-       "2   8.833333  3.135413e+06  41.500000  45.666667  46.500000  49.666667   \n",
-       "3   8.433333  3.137001e+06  42.333333  42.833333  40.500000  44.166667   \n",
-       "4   9.083333  3.138843e+06  50.500000  51.166667  55.500000  53.666667   \n",
-       "\n",
-       "   value_S23  value_S24  value_S25   value_S26  \n",
-       "0  47.666667  52.666667  40.833333  357.333333  \n",
-       "1  34.500000  39.333333  31.166667  249.666667  \n",
-       "2  39.333333  45.500000  36.166667  297.666667  \n",
-       "3  35.333333  37.833333  30.333333  268.000000  \n",
-       "4  46.166667  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 28 columns]"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.pop\n",
-    "\n",
-    "* Input: readings (unstacked)\n",
-    "* Output: readings (without turbine_id), turbine_id\n",
-    "* Effect: turbine_id has been popped from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 2\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'X', 'y', 'turbine_id'])"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0    T001\n",
-       "1    T001\n",
-       "2    T001\n",
-       "3    T001\n",
-       "4    T001\n",
-       "Name: turbine_id, dtype: object"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['turbine_id'].head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>timestamp</th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>value_S09</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>695143.166667</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>695403.666667</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>695656.500000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>695911.333333</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>696195.833333</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 27 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "            timestamp   value_S01   value_S02   value_S03   value_S04  \\\n",
-       "0 2013-01-10 00:00:00  313.333333  323.833333  336.000000  364.666667   \n",
-       "1 2013-01-10 01:00:00  197.500000  221.333333  216.000000  260.666667   \n",
-       "2 2013-01-10 02:00:00  248.166667  271.666667  277.500000  298.000000   \n",
-       "3 2013-01-10 03:00:00  253.166667  256.166667  242.666667  265.333333   \n",
-       "4 2013-01-10 04:00:00  305.000000  312.333333  346.166667  329.833333   \n",
-       "\n",
-       "    value_S05   value_S06   value_S07     value_S08      value_S09  ...  \\\n",
-       "0  286.500000  314.000000  243.166667  3.197980e+06  695143.166667  ...   \n",
-       "1  206.833333  235.833333  186.666667  3.198221e+06  695403.666667  ...   \n",
-       "2  233.666667  271.166667  216.333333  3.198448e+06  695656.500000  ...   \n",
-       "3  211.666667  226.666667  181.000000  3.198691e+06  695911.333333  ...   \n",
-       "4  280.666667  308.833333  271.833333  3.198978e+06  696195.833333  ...   \n",
-       "\n",
-       "   value_S17     value_S18  value_S19  value_S20  value_S21  value_S22  \\\n",
-       "0  10.383333  3.131958e+06  52.666667  54.333333  56.166667  61.000000   \n",
-       "1   8.666667  3.133668e+06  33.166667  37.000000  36.166667  43.666667   \n",
-       "2   8.833333  3.135413e+06  41.500000  45.666667  46.500000  49.666667   \n",
-       "3   8.433333  3.137001e+06  42.333333  42.833333  40.500000  44.166667   \n",
-       "4   9.083333  3.138843e+06  50.500000  51.166667  55.500000  53.666667   \n",
-       "\n",
-       "   value_S23  value_S24  value_S25   value_S26  \n",
-       "0  47.666667  52.666667  40.833333  357.333333  \n",
-       "1  34.500000  39.333333  31.166667  249.666667  \n",
-       "2  39.333333  45.500000  36.166667  297.666667  \n",
-       "3  35.333333  37.833333  30.333333  268.000000  \n",
-       "4  46.166667  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 27 columns]"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.pop\n",
-    "\n",
-    "* Input: readings (without turbine_id)\n",
-    "* Output: readings (without timestamp), timestamp\n",
-    "* Effect: timestamp has been popped from readings"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 3\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'X', 'y', 'timestamp'])"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0   2013-01-10 00:00:00\n",
-       "1   2013-01-10 01:00:00\n",
-       "2   2013-01-10 02:00:00\n",
-       "3   2013-01-10 03:00:00\n",
-       "4   2013-01-10 04:00:00\n",
-       "Name: timestamp, dtype: datetime64[ns]"
-      ]
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['timestamp'].head()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>value_S01</th>\n",
-       "      <th>value_S02</th>\n",
-       "      <th>value_S03</th>\n",
-       "      <th>value_S04</th>\n",
-       "      <th>value_S05</th>\n",
-       "      <th>value_S06</th>\n",
-       "      <th>value_S07</th>\n",
-       "      <th>value_S08</th>\n",
-       "      <th>value_S09</th>\n",
-       "      <th>value_S10</th>\n",
-       "      <th>...</th>\n",
-       "      <th>value_S17</th>\n",
-       "      <th>value_S18</th>\n",
-       "      <th>value_S19</th>\n",
-       "      <th>value_S20</th>\n",
-       "      <th>value_S21</th>\n",
-       "      <th>value_S22</th>\n",
-       "      <th>value_S23</th>\n",
-       "      <th>value_S24</th>\n",
-       "      <th>value_S25</th>\n",
-       "      <th>value_S26</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>313.333333</td>\n",
-       "      <td>323.833333</td>\n",
-       "      <td>336.000000</td>\n",
-       "      <td>364.666667</td>\n",
-       "      <td>286.500000</td>\n",
-       "      <td>314.000000</td>\n",
-       "      <td>243.166667</td>\n",
-       "      <td>3.197980e+06</td>\n",
-       "      <td>695143.166667</td>\n",
-       "      <td>3.348384e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>10.383333</td>\n",
-       "      <td>3.131958e+06</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>54.333333</td>\n",
-       "      <td>56.166667</td>\n",
-       "      <td>61.000000</td>\n",
-       "      <td>47.666667</td>\n",
-       "      <td>52.666667</td>\n",
-       "      <td>40.833333</td>\n",
-       "      <td>357.333333</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>197.500000</td>\n",
-       "      <td>221.333333</td>\n",
-       "      <td>216.000000</td>\n",
-       "      <td>260.666667</td>\n",
-       "      <td>206.833333</td>\n",
-       "      <td>235.833333</td>\n",
-       "      <td>186.666667</td>\n",
-       "      <td>3.198221e+06</td>\n",
-       "      <td>695403.666667</td>\n",
-       "      <td>3.348651e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.666667</td>\n",
-       "      <td>3.133668e+06</td>\n",
-       "      <td>33.166667</td>\n",
-       "      <td>37.000000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>43.666667</td>\n",
-       "      <td>34.500000</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>31.166667</td>\n",
-       "      <td>249.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>248.166667</td>\n",
-       "      <td>271.666667</td>\n",
-       "      <td>277.500000</td>\n",
-       "      <td>298.000000</td>\n",
-       "      <td>233.666667</td>\n",
-       "      <td>271.166667</td>\n",
-       "      <td>216.333333</td>\n",
-       "      <td>3.198448e+06</td>\n",
-       "      <td>695656.500000</td>\n",
-       "      <td>3.348910e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.833333</td>\n",
-       "      <td>3.135413e+06</td>\n",
-       "      <td>41.500000</td>\n",
-       "      <td>45.666667</td>\n",
-       "      <td>46.500000</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>39.333333</td>\n",
-       "      <td>45.500000</td>\n",
-       "      <td>36.166667</td>\n",
-       "      <td>297.666667</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>253.166667</td>\n",
-       "      <td>256.166667</td>\n",
-       "      <td>242.666667</td>\n",
-       "      <td>265.333333</td>\n",
-       "      <td>211.666667</td>\n",
-       "      <td>226.666667</td>\n",
-       "      <td>181.000000</td>\n",
-       "      <td>3.198691e+06</td>\n",
-       "      <td>695911.333333</td>\n",
-       "      <td>3.349157e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>8.433333</td>\n",
-       "      <td>3.137001e+06</td>\n",
-       "      <td>42.333333</td>\n",
-       "      <td>42.833333</td>\n",
-       "      <td>40.500000</td>\n",
-       "      <td>44.166667</td>\n",
-       "      <td>35.333333</td>\n",
-       "      <td>37.833333</td>\n",
-       "      <td>30.333333</td>\n",
-       "      <td>268.000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>305.000000</td>\n",
-       "      <td>312.333333</td>\n",
-       "      <td>346.166667</td>\n",
-       "      <td>329.833333</td>\n",
-       "      <td>280.666667</td>\n",
-       "      <td>308.833333</td>\n",
-       "      <td>271.833333</td>\n",
-       "      <td>3.198978e+06</td>\n",
-       "      <td>696195.833333</td>\n",
-       "      <td>3.349452e+06</td>\n",
-       "      <td>...</td>\n",
-       "      <td>9.083333</td>\n",
-       "      <td>3.138843e+06</td>\n",
-       "      <td>50.500000</td>\n",
-       "      <td>51.166667</td>\n",
-       "      <td>55.500000</td>\n",
-       "      <td>53.666667</td>\n",
-       "      <td>46.166667</td>\n",
-       "      <td>49.666667</td>\n",
-       "      <td>41.166667</td>\n",
-       "      <td>341.833333</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 26 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "    value_S01   value_S02   value_S03   value_S04   value_S05   value_S06  \\\n",
-       "0  313.333333  323.833333  336.000000  364.666667  286.500000  314.000000   \n",
-       "1  197.500000  221.333333  216.000000  260.666667  206.833333  235.833333   \n",
-       "2  248.166667  271.666667  277.500000  298.000000  233.666667  271.166667   \n",
-       "3  253.166667  256.166667  242.666667  265.333333  211.666667  226.666667   \n",
-       "4  305.000000  312.333333  346.166667  329.833333  280.666667  308.833333   \n",
-       "\n",
-       "    value_S07     value_S08      value_S09     value_S10  ...  value_S17  \\\n",
-       "0  243.166667  3.197980e+06  695143.166667  3.348384e+06  ...  10.383333   \n",
-       "1  186.666667  3.198221e+06  695403.666667  3.348651e+06  ...   8.666667   \n",
-       "2  216.333333  3.198448e+06  695656.500000  3.348910e+06  ...   8.833333   \n",
-       "3  181.000000  3.198691e+06  695911.333333  3.349157e+06  ...   8.433333   \n",
-       "4  271.833333  3.198978e+06  696195.833333  3.349452e+06  ...   9.083333   \n",
-       "\n",
-       "      value_S18  value_S19  value_S20  value_S21  value_S22  value_S23  \\\n",
-       "0  3.131958e+06  52.666667  54.333333  56.166667  61.000000  47.666667   \n",
-       "1  3.133668e+06  33.166667  37.000000  36.166667  43.666667  34.500000   \n",
-       "2  3.135413e+06  41.500000  45.666667  46.500000  49.666667  39.333333   \n",
-       "3  3.137001e+06  42.333333  42.833333  40.500000  44.166667  35.333333   \n",
-       "4  3.138843e+06  50.500000  51.166667  55.500000  53.666667  46.166667   \n",
-       "\n",
-       "   value_S24  value_S25   value_S26  \n",
-       "0  52.666667  40.833333  357.333333  \n",
-       "1  39.333333  31.166667  249.666667  \n",
-       "2  45.500000  36.166667  297.666667  \n",
-       "3  37.833333  30.333333  268.000000  \n",
-       "4  49.666667  41.166667  341.833333  \n",
-       "\n",
-       "[5 rows x 26 columns]"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## sklearn.impute.SimpleImputer\n",
-    "\n",
-    "* Input: readings (unstacked, no turbine_id, no timestamp)\n",
-    "* Output: readings (imputed, numpy array)\n",
-    "* Effect: readings have been imputed and converted to numpy array"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 4\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[3.13333333e+02, 3.23833333e+02, 3.36000000e+02, 3.64666667e+02,\n",
-       "        2.86500000e+02, 3.14000000e+02, 2.43166667e+02, 3.19798000e+06,\n",
-       "        6.95143167e+05, 3.34838383e+06, 3.43692150e+06, 3.32248667e+06,\n",
-       "        3.35809000e+06, 3.22390150e+06, 7.95000000e+00, 5.85000000e+00,\n",
-       "        1.03833333e+01, 3.13195833e+06, 5.26666667e+01, 5.43333333e+01,\n",
-       "        5.61666667e+01, 6.10000000e+01, 4.76666667e+01, 5.26666667e+01,\n",
-       "        4.08333333e+01, 3.57333333e+02],\n",
-       "       [1.97500000e+02, 2.21333333e+02, 2.16000000e+02, 2.60666667e+02,\n",
-       "        2.06833333e+02, 2.35833333e+02, 1.86666667e+02, 3.19822067e+06,\n",
-       "        6.95403667e+05, 3.34865117e+06, 3.43722283e+06, 3.32272200e+06,\n",
-       "        3.35834000e+06, 3.22409567e+06, 6.83333333e+00, 5.15000000e+00,\n",
-       "        8.66666667e+00, 3.13366817e+06, 3.31666667e+01, 3.70000000e+01,\n",
-       "        3.61666667e+01, 4.36666667e+01, 3.45000000e+01, 3.93333333e+01,\n",
-       "        3.11666667e+01, 2.49666667e+02],\n",
-       "       [2.48166667e+02, 2.71666667e+02, 2.77500000e+02, 2.98000000e+02,\n",
-       "        2.33666667e+02, 2.71166667e+02, 2.16333333e+02, 3.19844767e+06,\n",
-       "        6.95656500e+05, 3.34890967e+06, 3.43751900e+06, 3.32295950e+06,\n",
-       "        3.35862067e+06, 3.22432333e+06, 7.11666667e+00, 5.56666667e+00,\n",
-       "        8.83333333e+00, 3.13541283e+06, 4.15000000e+01, 4.56666667e+01,\n",
-       "        4.65000000e+01, 4.96666667e+01, 3.93333333e+01, 4.55000000e+01,\n",
-       "        3.61666667e+01, 2.97666667e+02],\n",
-       "       [2.53166667e+02, 2.56166667e+02, 2.42666667e+02, 2.65333333e+02,\n",
-       "        2.11666667e+02, 2.26666667e+02, 1.81000000e+02, 3.19869117e+06,\n",
-       "        6.95911333e+05, 3.34915717e+06, 3.43778050e+06, 3.32316850e+06,\n",
-       "        3.35884883e+06, 3.22450217e+06, 6.71666667e+00, 5.16666667e+00,\n",
-       "        8.43333333e+00, 3.13700133e+06, 4.23333333e+01, 4.28333333e+01,\n",
-       "        4.05000000e+01, 4.41666667e+01, 3.53333333e+01, 3.78333333e+01,\n",
-       "        3.03333333e+01, 2.68000000e+02],\n",
-       "       [3.05000000e+02, 3.12333333e+02, 3.46166667e+02, 3.29833333e+02,\n",
-       "        2.80666667e+02, 3.08833333e+02, 2.71833333e+02, 3.19897850e+06,\n",
-       "        6.96195833e+05, 3.34945200e+06, 3.43807767e+06, 3.32340933e+06,\n",
-       "        3.35910983e+06, 3.22471400e+06, 7.20000000e+00, 5.28333333e+00,\n",
-       "        9.08333333e+00, 3.13884333e+06, 5.05000000e+01, 5.11666667e+01,\n",
-       "        5.55000000e+01, 5.36666667e+01, 4.61666667e+01, 4.96666667e+01,\n",
-       "        4.11666667e+01, 3.41833333e+02]])"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'][0:5]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## sklearn.preprocessing.MinMaxScaler\n",
-    "\n",
-    "* Input: (imputed, array)\n",
-    "* Output: readings (scaled, array)\n",
-    "* Effect: readings have been scaled to [-1, 1] range"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 5\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 25,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[-0.26126126, -0.23706897, -0.20870076, -0.14106583, -0.32328767,\n",
-       "        -0.25969448, -0.42198789, -1.        , -1.        , -1.        ,\n",
-       "        -1.        , -1.        , -1.        , -1.        , -0.11007463,\n",
-       "        -0.16824645, -0.10424155, -0.37397741, -0.25233645, -0.22716628,\n",
-       "        -0.20140515, -0.13481829, -0.32239156, -0.25380117, -0.4182243 ,\n",
-       "        -0.25697453],\n",
-       "       [-0.53349001, -0.47805643, -0.49088771, -0.38557994, -0.51037182,\n",
-       "        -0.44339992, -0.55438391, -0.99983031, -0.99982547, -0.99982499,\n",
-       "        -0.99980741, -0.9998428 , -0.99983779, -0.99986887, -0.23507463,\n",
-       "        -0.26777251, -0.25233645, -0.37363511, -0.52570093, -0.470726  ,\n",
-       "        -0.4824356 , -0.37866354, -0.50762016, -0.44093567, -0.55373832,\n",
-       "        -0.48085254],\n",
-       "       [-0.41441441, -0.35971787, -0.3462669 , -0.29780564, -0.44735812,\n",
-       "        -0.36036036, -0.48486624, -0.99967026, -0.99965608, -0.99965576,\n",
-       "        -0.99961813, -0.99968416, -0.99965569, -0.99971512, -0.20335821,\n",
-       "        -0.20853081, -0.2379583 , -0.37328583, -0.4088785 , -0.34894614,\n",
-       "        -0.33723653, -0.29425557, -0.43962485, -0.35438596, -0.48364486,\n",
-       "        -0.38104315],\n",
-       "       [-0.40266353, -0.39615987, -0.4281795 , -0.37460815, -0.49902153,\n",
-       "        -0.4649432 , -0.56766257, -0.99949857, -0.99948535, -0.99949373,\n",
-       "        -0.999451  , -0.99954455, -0.99950765, -0.99959435, -0.24813433,\n",
-       "        -0.26540284, -0.27246585, -0.37296782, -0.39719626, -0.38875878,\n",
-       "        -0.42154567, -0.37162954, -0.49589683, -0.4619883 , -0.56542056,\n",
-       "        -0.4427309 ],\n",
-       "       [-0.28084606, -0.26410658, -0.18479326, -0.22296238, -0.3369863 ,\n",
-       "        -0.27183705, -0.35481351, -0.99929598, -0.99929474, -0.99930071,\n",
-       "        -0.99926107, -0.99938368, -0.99933831, -0.9994513 , -0.19402985,\n",
-       "        -0.24881517, -0.21639109, -0.37259906, -0.28271028, -0.27166276,\n",
-       "        -0.21077283, -0.23798359, -0.34349355, -0.29590643, -0.4135514 ,\n",
-       "        -0.28920464]])"
-      ]
-     },
-     "execution_count": 26,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'][0:5]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame\n",
-    "\n",
-    "* Input: readings (scaled, array)\n",
-    "* Output: readings (dataframe)\n",
-    "* Effect: readings have been converted into a dataframe"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 6\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 28,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 28,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>16</th>\n",
-       "      <th>17</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.104242</td>\n",
-       "      <td>-0.373977</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.373635</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.237958</td>\n",
-       "      <td>-0.373286</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.272466</td>\n",
-       "      <td>-0.372968</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.216391</td>\n",
-       "      <td>-0.372599</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 26 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "         0         1         2         3         4         5         6   \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "         7         8         9   ...        16        17        18        19  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.104242 -0.373977 -0.252336 -0.227166   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.252336 -0.373635 -0.525701 -0.470726   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.237958 -0.373286 -0.408879 -0.348946   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.272466 -0.372968 -0.397196 -0.388759   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.216391 -0.372599 -0.282710 -0.271663   \n",
-       "\n",
-       "         20        21        22        23        24        25  \n",
-       "0 -0.201405 -0.134818 -0.322392 -0.253801 -0.418224 -0.256975  \n",
-       "1 -0.482436 -0.378664 -0.507620 -0.440936 -0.553738 -0.480853  \n",
-       "2 -0.337237 -0.294256 -0.439625 -0.354386 -0.483645 -0.381043  \n",
-       "3 -0.421546 -0.371630 -0.495897 -0.461988 -0.565421 -0.442731  \n",
-       "4 -0.210773 -0.237984 -0.343494 -0.295906 -0.413551 -0.289205  \n",
-       "\n",
-       "[5 rows x 26 columns]"
-      ]
-     },
-     "execution_count": 29,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.set\n",
-    "\n",
-    "* Input: readings (dataframe)\n",
-    "* Output: readings (dataframe with turbine_id)\n",
-    "* Effect: turbine_id has been set as a readings column"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 30,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 7\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 31,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 31,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 32,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>17</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "      <th>turbine_id</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373977</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373635</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.373286</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.372968</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.372599</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "      <td>T001</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 27 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "          0         1         2         3         4         5         6  \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "          7         8         9  ...        17        18        19        20  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.373977 -0.252336 -0.227166 -0.201405   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.373635 -0.525701 -0.470726 -0.482436   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.373286 -0.408879 -0.348946 -0.337237   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.372968 -0.397196 -0.388759 -0.421546   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.372599 -0.282710 -0.271663 -0.210773   \n",
-       "\n",
-       "         21        22        23        24        25  turbine_id  \n",
-       "0 -0.134818 -0.322392 -0.253801 -0.418224 -0.256975        T001  \n",
-       "1 -0.378664 -0.507620 -0.440936 -0.553738 -0.480853        T001  \n",
-       "2 -0.294256 -0.439625 -0.354386 -0.483645 -0.381043        T001  \n",
-       "3 -0.371630 -0.495897 -0.461988 -0.565421 -0.442731        T001  \n",
-       "4 -0.237984 -0.343494 -0.295906 -0.413551 -0.289205        T001  \n",
-       "\n",
-       "[5 rows x 27 columns]"
-      ]
-     },
-     "execution_count": 32,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## pandas.DataFrame.set\n",
-    "\n",
-    "* Input: readings (dataframe with turbine_id)\n",
-    "* Output: readings (dataframe with turbine_id and timestamp)\n",
-    "* Effect: timestamp has been set as a readings column"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 33,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 8\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 34,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>0</th>\n",
-       "      <th>1</th>\n",
-       "      <th>2</th>\n",
-       "      <th>3</th>\n",
-       "      <th>4</th>\n",
-       "      <th>5</th>\n",
-       "      <th>6</th>\n",
-       "      <th>7</th>\n",
-       "      <th>8</th>\n",
-       "      <th>9</th>\n",
-       "      <th>...</th>\n",
-       "      <th>18</th>\n",
-       "      <th>19</th>\n",
-       "      <th>20</th>\n",
-       "      <th>21</th>\n",
-       "      <th>22</th>\n",
-       "      <th>23</th>\n",
-       "      <th>24</th>\n",
-       "      <th>25</th>\n",
-       "      <th>turbine_id</th>\n",
-       "      <th>timestamp</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>-0.261261</td>\n",
-       "      <td>-0.237069</td>\n",
-       "      <td>-0.208701</td>\n",
-       "      <td>-0.141066</td>\n",
-       "      <td>-0.323288</td>\n",
-       "      <td>-0.259694</td>\n",
-       "      <td>-0.421988</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>-1.000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.252336</td>\n",
-       "      <td>-0.227166</td>\n",
-       "      <td>-0.201405</td>\n",
-       "      <td>-0.134818</td>\n",
-       "      <td>-0.322392</td>\n",
-       "      <td>-0.253801</td>\n",
-       "      <td>-0.418224</td>\n",
-       "      <td>-0.256975</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 00:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.533490</td>\n",
-       "      <td>-0.478056</td>\n",
-       "      <td>-0.490888</td>\n",
-       "      <td>-0.385580</td>\n",
-       "      <td>-0.510372</td>\n",
-       "      <td>-0.443400</td>\n",
-       "      <td>-0.554384</td>\n",
-       "      <td>-0.999830</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>-0.999825</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.525701</td>\n",
-       "      <td>-0.470726</td>\n",
-       "      <td>-0.482436</td>\n",
-       "      <td>-0.378664</td>\n",
-       "      <td>-0.507620</td>\n",
-       "      <td>-0.440936</td>\n",
-       "      <td>-0.553738</td>\n",
-       "      <td>-0.480853</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 01:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>-0.414414</td>\n",
-       "      <td>-0.359718</td>\n",
-       "      <td>-0.346267</td>\n",
-       "      <td>-0.297806</td>\n",
-       "      <td>-0.447358</td>\n",
-       "      <td>-0.360360</td>\n",
-       "      <td>-0.484866</td>\n",
-       "      <td>-0.999670</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>-0.999656</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.408879</td>\n",
-       "      <td>-0.348946</td>\n",
-       "      <td>-0.337237</td>\n",
-       "      <td>-0.294256</td>\n",
-       "      <td>-0.439625</td>\n",
-       "      <td>-0.354386</td>\n",
-       "      <td>-0.483645</td>\n",
-       "      <td>-0.381043</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 02:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.402664</td>\n",
-       "      <td>-0.396160</td>\n",
-       "      <td>-0.428180</td>\n",
-       "      <td>-0.374608</td>\n",
-       "      <td>-0.499022</td>\n",
-       "      <td>-0.464943</td>\n",
-       "      <td>-0.567663</td>\n",
-       "      <td>-0.999499</td>\n",
-       "      <td>-0.999485</td>\n",
-       "      <td>-0.999494</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.397196</td>\n",
-       "      <td>-0.388759</td>\n",
-       "      <td>-0.421546</td>\n",
-       "      <td>-0.371630</td>\n",
-       "      <td>-0.495897</td>\n",
-       "      <td>-0.461988</td>\n",
-       "      <td>-0.565421</td>\n",
-       "      <td>-0.442731</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 03:00:00</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>-0.280846</td>\n",
-       "      <td>-0.264107</td>\n",
-       "      <td>-0.184793</td>\n",
-       "      <td>-0.222962</td>\n",
-       "      <td>-0.336986</td>\n",
-       "      <td>-0.271837</td>\n",
-       "      <td>-0.354814</td>\n",
-       "      <td>-0.999296</td>\n",
-       "      <td>-0.999295</td>\n",
-       "      <td>-0.999301</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-0.282710</td>\n",
-       "      <td>-0.271663</td>\n",
-       "      <td>-0.210773</td>\n",
-       "      <td>-0.237984</td>\n",
-       "      <td>-0.343494</td>\n",
-       "      <td>-0.295906</td>\n",
-       "      <td>-0.413551</td>\n",
-       "      <td>-0.289205</td>\n",
-       "      <td>T001</td>\n",
-       "      <td>2013-01-10 04:00:00</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>5 rows × 28 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "          0         1         2         3         4         5         6  \\\n",
-       "0 -0.261261 -0.237069 -0.208701 -0.141066 -0.323288 -0.259694 -0.421988   \n",
-       "1 -0.533490 -0.478056 -0.490888 -0.385580 -0.510372 -0.443400 -0.554384   \n",
-       "2 -0.414414 -0.359718 -0.346267 -0.297806 -0.447358 -0.360360 -0.484866   \n",
-       "3 -0.402664 -0.396160 -0.428180 -0.374608 -0.499022 -0.464943 -0.567663   \n",
-       "4 -0.280846 -0.264107 -0.184793 -0.222962 -0.336986 -0.271837 -0.354814   \n",
-       "\n",
-       "          7         8         9  ...        18        19        20        21  \\\n",
-       "0 -1.000000 -1.000000 -1.000000  ... -0.252336 -0.227166 -0.201405 -0.134818   \n",
-       "1 -0.999830 -0.999825 -0.999825  ... -0.525701 -0.470726 -0.482436 -0.378664   \n",
-       "2 -0.999670 -0.999656 -0.999656  ... -0.408879 -0.348946 -0.337237 -0.294256   \n",
-       "3 -0.999499 -0.999485 -0.999494  ... -0.397196 -0.388759 -0.421546 -0.371630   \n",
-       "4 -0.999296 -0.999295 -0.999301  ... -0.282710 -0.271663 -0.210773 -0.237984   \n",
-       "\n",
-       "         22        23        24        25  turbine_id           timestamp  \n",
-       "0 -0.322392 -0.253801 -0.418224 -0.256975        T001 2013-01-10 00:00:00  \n",
-       "1 -0.507620 -0.440936 -0.553738 -0.480853        T001 2013-01-10 01:00:00  \n",
-       "2 -0.439625 -0.354386 -0.483645 -0.381043        T001 2013-01-10 02:00:00  \n",
-       "3 -0.495897 -0.461988 -0.565421 -0.442731        T001 2013-01-10 03:00:00  \n",
-       "4 -0.343494 -0.295906 -0.413551 -0.289205        T001 2013-01-10 04:00:00  \n",
-       "\n",
-       "[5 rows x 28 columns]"
-      ]
-     },
-     "execution_count": 35,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].head()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences\n",
-    "\n",
-    "* Input: X, readings (dataframe with turbine_id and timestamp)\n",
-    "* Output: X\n",
-    "* Effect: X has been converted to a 3d numpy array that contains 1 matrix of shape\n",
-    "  (window_size x num_signals) for each one of the target times."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 36,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'window_size': 24, 'cutoff_time': 'cutoff_time', 'time_index': 'timestamp'}"
-      ]
-     },
-     "execution_count": 36,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "pipeline._pipeline.get_hyperparameters()[\n",
-    "    'mlprimitives.custom.timeseries_preprocessing.cutoff_window_sequences#1']"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 37,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 9\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 38,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "dict_keys(['readings', 'turbines', 'turbine_id', 'timestamp', 'X', 'y'])"
-      ]
-     },
-     "execution_count": 38,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context.keys()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 39,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(8521, 28)"
-      ]
-     },
-     "execution_count": 39,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['readings'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 40,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(353,)"
-      ]
-     },
-     "execution_count": 40,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['y'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 41,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(353, 24, 26)"
-      ]
-     },
-     "execution_count": 41,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['X'].shape"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 42,
-   "metadata": {
-    "scrolled": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[-0.58793576, -0.60305643, -0.63981971, -0.61481191, -0.69823875,\n",
-       "        -0.65021543, -0.68912322, -0.99436914, -0.99439755, -0.99454249,\n",
-       "        -0.99446788, -0.99476185, -0.99490997, -0.99529511, -0.34701493,\n",
-       "        -0.33886256, -0.33860532, -0.36301186, -0.57943925, -0.59250585,\n",
-       "        -0.6323185 , -0.60609613, -0.69284877, -0.64444444, -0.68691589,\n",
-       "        -0.63853752],\n",
-       "       [-0.56600078, -0.5846395 , -0.63002156, -0.61559561, -0.70880626,\n",
-       "        -0.66392479, -0.69732474, -0.9942427 , -0.99427986, -0.9944408 ,\n",
-       "        -0.99436498, -0.99468147, -0.99482011, -0.99521249, -0.33955224,\n",
-       "        -0.31516588, -0.38892883, -0.36280656, -0.55841121, -0.57611241,\n",
-       "        -0.62295082, -0.61078546, -0.70222743, -0.65847953, -0.69392523,\n",
-       "        -0.63645815],\n",
-       "       [-0.64081473, -0.64184953, -0.67038997, -0.63597179, -0.71350294,\n",
-       "        -0.65844105, -0.66764304, -0.99412236, -0.99416864, -0.99434228,\n",
-       "        -0.99426059, -0.99459663, -0.99472365, -0.99511795, -0.34328358,\n",
-       "        -0.30094787, -0.36304817, -0.36259859, -0.63317757, -0.6323185 ,\n",
-       "        -0.66042155, -0.62954279, -0.70926143, -0.65380117, -0.66588785,\n",
-       "        -0.66002426]])"
-      ]
-     },
-     "execution_count": 42,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "context['X'][0][:3]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## keras.Sequential.LSTMTimeSeriesClassifier\n",
-    "\n",
-    "* Input: X, y\n",
-    "* Output: \n",
-    "* Effect: LSTM has been fitted."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 43,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "step = 10\n",
-    "context = pipeline.fit(**context, output_=step, start_=step)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}


Test patch:
diff --git a/tests/test_benchmark.py b/tests/test_benchmark.py
index 5d6f116..d88425b 100644
--- a/tests/test_benchmark.py
+++ b/tests/test_benchmark.py
@@ -8,7 +8,7 @@
 def test_predict():
     # setup
     templates = [
-        'probability.unstack_lstm_timeseries_classifier'
+        'dfs_xgb_prob_with_unstack_normalization'
     ]
 
     window_size_rule = [
diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py
index 725d299..f8526c9 100644
--- a/tests/test_pipeline.py
+++ b/tests/test_pipeline.py
@@ -6,8 +6,26 @@
 from unittest.mock import patch
 
 import pandas as pd
+import pytest
 
-from draco.pipeline import DracoPipeline
+from draco.pipeline import DracoPipeline, get_pipelines
+
+
+def test_get_pipelines():
+    output = get_pipelines()
+    assert isinstance(output, list)
+
+
+def test_get_pipelines_type():
+    output = get_pipelines(pipeline_type='lstm')
+    assert isinstance(output, list)
+    for path in output:
+        assert 'lstm' in path
+
+
+def test_get_pipelines_type_error():
+    with pytest.raises(FileNotFoundError):
+        get_pipelines(pipeline_type='does-not-exist')
 
 
 class TestDracoPipeline(TestCase):