> ## Documentation Index
> Fetch the complete documentation index at: https://docs.graphext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Wizard

> Transform and enrich your data easily and conveniently

The Wizard is your personal assistant for advanced steps composition when
you need to do some transformation or processing on your data.

The Wizard really just helps you compose [steps](/concepts/graphext-concepts/steps)
within the [recipe](/concepts/graphext-concepts/recipe), but does so in a more
intuitive and opinionated way, when you are not entirely sure of
what to write.

<Frame caption="The wizard menu, showcasing the main worflows that you can perform">
  <img src="https://mintcdn.com/graphext/McO4MTYPhEdyoC4d/images/wizard.webp?fit=max&auto=format&n=McO4MTYPhEdyoC4d&q=85&s=b963b5886d2da7db8bc1005ce7d5f37c" alt="Wizard" width="1352" height="976" data-path="images/wizard.webp" />
</Frame>

The menu guides you through all the steps necessary to accomplish what
you have in mind.

Here you can see how easy it is to make a model that predicts `price` based on
some coordinates and other potentially important factors:

<Frame caption="Dragging and dropping important variables into the slots">
  <img src="https://mintcdn.com/graphext/McO4MTYPhEdyoC4d/images/wizard-model.webp?fit=max&auto=format&n=McO4MTYPhEdyoC4d&q=85&s=3315c7cf440f0f68ad47ce6438275d57" alt="Model creation through Graphext's wizard" width="2002" height="1592" data-path="images/wizard-model.webp" />
</Frame>

And this is all the code it generated for us. Among other things, it mainly extracts some
time components from date-based columns, creates tags, uses the [train\_classification](/api-docs/analyse/train_and_predict/train_classification) and [test\_classification](/api-docs/analyse/train_and_predict/test_classification) steps to train a model with the default configuration and creates a bunch of columns that hold this prediction data.

Some of the intermediate columns are hidden, since they are important for the model but not revelant for human interpretation. Nevertheless, these can be brought back if needed.

<Accordion title="Code generated when creating a model">
  ```erlang theme={null}
  extract_date_component(ds.last_scraped, {
      "component": "hour"
  }) => (ds.hour)

  extract_date_component(ds.last_scraped, {
      "component": "month_name"
  }) => (ds.month_name)

  extract_date_component(ds.last_scraped, {
      "component": "weekday_name"
  }) => (ds.weekday_name)

  configure_tagged_columns(ds[["neighbourhood_cleansed", "host_verifications", "host_total_listings_count", "longitude", "latitude", "price"]],
                           {
                               "Target": [
                                   "price"
                               ],
                               "Factors": [
                                   "latitude",
                                   "longitude",
                                   "host_total_listings_count",
                                   "host_verifications",
                                   "neighbourhood_cleansed"
                               ]
                           })

  train_classification(ds[["price", "neighbourhood_cleansed", "host_verifications", "host_total_listings_count", "longitude", "latitude"]],
                       {
                           "target": "price",
                           "model": "CatboostClassifier",
                           "params": {
                               "depth": 6,
                               "nan_mode": "Min",
                               "iterations": 1000,
                               "one_hot_max_size": 10,
                               "max_ctr_complexity": 2,
                               "boosting_type": "Plain"
                           },
                           "validate": {
                               "n_splits": 5,
                               "metrics": [
                                   "accuracy"
                               ]
                           }
                       }) => (ds.gx_prediction,
                              "ds-model-yFqI")

  test_classification(ds[["price", "neighbourhood_cleansed", "host_verifications", "host_total_listings_count", "longitude", "latitude"]],
                      "ds-model-yFqI",
                      {
                          "refit": true,
                          "split": {
                              "test_size": 0.2
                          },
                          "target": "price"
                      }) => (ds.gx_prediction,
                             ds.prob,
                             ds.Error,
                             ds.split)

  configure_column_metadata(ds.Error,
                            {
                                "label": "Error",
                                "description": "Whether the predicted class was correct or wrong"
                            })

  configure_column_metadata(ds.gx_prediction, {
      "label": "Prediction",
      "description": "Prediction made for the target varible"
  })

  configure_tagged_columns(ds[["split", "prob", "Error", "gx_prediction"]],
                           {
                               "Output Variables": [
                                   "gx_prediction",
                                   "Error",
                                   "prob",
                                   "split"
                               ]
                           })

  configure_columns_order(ds.price,
                          ds.gx_prediction,
                          ds.Error,
                          ds.prob,
                          ds.split,
                          ds.latitude,
                          ds.longitude,
                          ds.host_total_listings_count,
                          ds.host_verifications,
                          ds.neighbourhood_cleansed)

  configure_column_visibility(ds.Error, {
      "graph": "pinned"
  })

  configure_column_visibility(ds.prob, {
      "graph": "pinned"
  })

  configure_column_visibility(ds.split, {
      "graph": "pinned"
  })
  ```
</Accordion>
