Repository: evidentlyai/evidently
Issue: Integration with PyCaret
Root cause: Documentation Deficiency

Hi, first of all - great project! I see a lot of value in integrating evidently in the `predict_model` function of [pycaret.classification](https://pycaret.readthedocs.io/en/latest/api/classification.html) and [pycaret.regression](https://pycaret.readthedocs.io/en/latest/api/regression.html) module. So far I have explored the type of functionalities we can integrate and it seems like that it should be a pretty straightforward implementation. At the moment we cannot render inline plots on Windows and I understand from your documentation that this will be addressed in future releases. Until then we can release the functionality as experimental with only HTML mode. 

I have one question at the moment. I was able to generate `DataDriftTab`, and `CatTargetDriftTab` with the following code:

```
from evidently.dashboard import Dashboard
from evidently.tabs import DataDriftTab, CatTargetDriftTab, ClassificationPerformanceTab, ProbClassificationPerformanceTab
from evidently.pipeline.column_mapping import ColumnMapping

p = get_config('prep_pipe').steps[0][1].learned_dtypes
numeric_features = list(p[(p=='float32') | (p=='float64')].index)
categorical_features = list(p[p=='object'].index)

reference_data = data.iloc[get_config('X_train').index]
current_data = data.iloc[get_config('X_test').index]

column_mapping = ColumnMapping()
column_mapping.target = get_config('prep_pipe').steps[0][1].target
column_mapping.prediction = None
column_mapping.datetime = None

column_mapping.numerical_features = numeric_features
column_mapping.categorical_features = categorical_features

dashboard = Dashboard(tabs=[DataDriftTab(), CatTargetDriftTab()])
dashboard.calculate(reference_data, current_data, column_mapping = column_mapping)
dashboard.save("reports/my_report.html")
```
![image](https://user-images.githubusercontent.com/54699234/145226823-18895880-4ce4-42fb-a4a3-ec34657d0018.png)

but when I adapt the code to get `ProbClassificationPerformanceTab` I get this error:

code:
```
from evidently.dashboard import Dashboard
from evidently.tabs import DataDriftTab, CatTargetDriftTab, ClassificationPerformanceTab, ProbClassificationPerformanceTab
from evidently.pipeline.column_mapping import ColumnMapping

p = get_config('prep_pipe').steps[0][1].learned_dtypes
numeric_features = list(p[(p=='float32') | (p=='float64')].index)
categorical_features = list(p[p=='object'].index)

reference_data = data.iloc[get_config('X_train').index]
current_data = data.iloc[get_config('X_test').index]

column_mapping = ColumnMapping()
column_mapping.target = get_config('prep_pipe').steps[0][1].target
column_mapping.prediction = None
column_mapping.datetime = None

column_mapping.numerical_features = numeric_features
column_mapping.categorical_features = categorical_features

train_probas = pd.DataFrame(lr.predict_proba(get_config('X_train')))
test_probas = pd.DataFrame(lr.predict_proba(get_config('X_test')))

reference_data.reset_index(inplace=True, drop=True)
current_data.reset_index(inplace=True, drop=True)
merged_reference = pd.concat([reference_data, train_probas], axis = 1)
merged_current_data = pd.concat([current_data, test_probas], axis = 1)

dashboard = Dashboard(tabs=[ProbClassificationPerformanceTab()])
dashboard.calculate(merged_reference, merged_current_data, column_mapping = column_mapping)
dashboard.save('reports/my_report_probclassifier.html')
```

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-46-d3eb6e0a3035> in <module>
     32 dashboard = Dashboard(tabs=[ProbClassificationPerformanceTab()])
     33 dashboard.calculate(merged_reference, merged_current_data, column_mapping = column_mapping)
---> 34 dashboard.save('reports/my_report_probclassifier.html')

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\dashboard\dashboard.py in save(self, filename)
    203             os.makedirs(parent_dir, exist_ok=True)
    204         with open(filename, 'w', encoding='utf-8') as out_file:
--> 205             out_file.write(self.html())

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\dashboard\dashboard.py in html(self)
    196 
    197     def html(self):
--> 198         return self.__render(file_html_template)
    199 
    200     def save(self, filename):

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\dashboard\dashboard.py in __render(self, template)
    152     def __render(self, template: Callable[[TemplateParams], str]):
    153         dashboard_id = "evidently_dashboard_" + str(uuid.uuid4()).replace("-", "")
--> 154         tab_widgets = [t.info() for t in self.stages]
    155 
    156         dashboard_info = DashboardInfo(dashboard_id, [item for tab in tab_widgets for item in tab if item is not None])

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\dashboard\dashboard.py in <listcomp>(.0)
    152     def __render(self, template: Callable[[TemplateParams], str]):
    153         dashboard_id = "evidently_dashboard_" + str(uuid.uuid4()).replace("-", "")
--> 154         tab_widgets = [t.info() for t in self.stages]
    155 
    156         dashboard_info = DashboardInfo(dashboard_id, [item for tab in tab_widgets for item in tab if item is not None])

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\tabs\base_tab.py in info(self)
     51 
     52     def info(self) -> List[Optional[BaseWidgetInfo]]:
---> 53         return [w.get_info() for w in self._widgets]
     54 
     55     @classmethod

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\tabs\base_tab.py in <listcomp>(.0)
     51 
     52     def info(self) -> List[Optional[BaseWidgetInfo]]:
---> 53         return [w.get_info() for w in self._widgets]
     54 
     55     @classmethod

~\anaconda3\envs\pycaret-dev\lib\site-packages\evidently\widgets\widget.py in get_info(self)
     31         if self.wi:
     32             return self.wi
---> 33         raise ValueError(f"[Widget {self.title}] self.wi is None, no data available (forget to set it in widget?)")
     34 
     35     @abc.abstractmethod


ValueError: [Widget Probabilistic Classification Model Performance Report.] self.wi is None, no data available (forget to set it in widget?)

Any help please? reproducible google colab notebook [here](https://colab.research.google.com/drive/1Uk8KgQsJdD3V6ycA6MDliqDerYnSG1On?usp=sharing).

It is because you need to define the classes in `column_mapping.prediction`. See [example line 27](https://github.com/evidentlyai/evidently/pull/91/files#diff-ab345753bb56c93445789566698667f01206d5c07117e7d2f94b07bbcc0f649a) from test.

```
def _get_probabilistic_iris():
    ...
    iris_column_mapping = ColumnMapping()
    iris_column_mapping.target = 'target'
    iris_column_mapping.prediction = iris.target_names.tolist()
    iris_column_mapping.numerical_features = iris.feature_names
    ....
```

When you look into the code, when `target` and `prediction` are missing, the analyzer does not compute anything which results in no widgets popping up.



@burkovae Amazing. This solves my problem.