/ examples / cookbook / regression_preset.ipynb
regression_preset.ipynb
  1  {
  2   "cells": [
  3    {
  4     "cell_type": "markdown",
  5     "id": "6228a984-1d0d-4f09-9089-1d254089a166",
  6     "metadata": {},
  7     "source": [
  8      "# 📘 Tutorial: Using Evidently Regression Presets with Tests"
  9     ]
 10    },
 11    {
 12     "cell_type": "code",
 13     "execution_count": null,
 14     "id": "b26fe08a-8acd-4f72-a02f-e05e34c9cd41",
 15     "metadata": {},
 16     "outputs": [],
 17     "source": [
 18      "import pandas as pd\n",
 19      "from sklearn import datasets, model_selection, linear_model\n",
 20      "\n",
 21      "from evidently import Report, DataDefinition, Dataset, Regression\n",
 22      "from evidently.presets import RegressionDummyQuality, RegressionQuality, RegressionPreset\n",
 23      "from evidently.tests import lte, gte, lt, gt, is_in, not_in, eq, not_eq\n",
 24      "from evidently.core.metric_types import MeanStdMetricTests"
 25     ]
 26    },
 27    {
 28     "cell_type": "markdown",
 29     "id": "7f843068-db84-4b62-a1bc-cda2f7cfaec9",
 30     "metadata": {},
 31     "source": [
 32      "# Regression presets\n",
 33      "\n",
 34      "## 🧩 1. What Are Regression Presets?\n",
 35      "\n",
 36      "Evidently provides pre-defined “presets” for common testing scenarios in regression tasks. These presets help evaluate model behavior using curated sets of metrics and test conditions — so you can focus on insights, not boilerplate."
 37     ]
 38    },
 39    {
 40     "cell_type": "code",
 41     "execution_count": null,
 42     "id": "d8641a14-0f4c-4fad-b734-f6e1f4a769ba",
 43     "metadata": {},
 44     "outputs": [],
 45     "source": [
 46      "housing_data = datasets.fetch_california_housing(as_frame=True)"
 47     ]
 48    },
 49    {
 50     "cell_type": "code",
 51     "execution_count": null,
 52     "id": "411fe832-4ada-4215-8bfe-c17eb367fc80",
 53     "metadata": {},
 54     "outputs": [],
 55     "source": [
 56      "X_train, X_test, y_train, y_test = model_selection.train_test_split(housing_data.data, \n",
 57      "                                                                    housing_data.target, \n",
 58      "                                                                    test_size=0.4, \n",
 59      "                                                                    random_state=42)"
 60     ]
 61    },
 62    {
 63     "cell_type": "code",
 64     "execution_count": null,
 65     "id": "87c8ce45-dce7-48cd-925b-93d3a36cae32",
 66     "metadata": {},
 67     "outputs": [],
 68     "source": [
 69      "features = X_train.columns.to_list()"
 70     ]
 71    },
 72    {
 73     "cell_type": "code",
 74     "execution_count": null,
 75     "id": "15550d71-a648-4c37-9d45-dab268d8ce33",
 76     "metadata": {},
 77     "outputs": [],
 78     "source": [
 79      "model = linear_model.Ridge(random_state=42)"
 80     ]
 81    },
 82    {
 83     "cell_type": "code",
 84     "execution_count": null,
 85     "id": "4161ee73-2da8-4049-8ef8-ee32719dc754",
 86     "metadata": {},
 87     "outputs": [],
 88     "source": [
 89      "model.fit(X_train, y_train)"
 90     ]
 91    },
 92    {
 93     "cell_type": "code",
 94     "execution_count": null,
 95     "id": "179700e7-c799-41fa-9e45-a940ea875410",
 96     "metadata": {},
 97     "outputs": [],
 98     "source": [
 99      "preds_train = model.predict(X_train)\n",
100      "preds_test = model.predict(X_test)"
101     ]
102    },
103    {
104     "cell_type": "code",
105     "execution_count": null,
106     "id": "e9ee4c15-e93f-46a6-adf2-074a7e30548b",
107     "metadata": {},
108     "outputs": [],
109     "source": [
110      "X_train['target'] = y_train\n",
111      "X_train['prediction'] = preds_train"
112     ]
113    },
114    {
115     "cell_type": "code",
116     "execution_count": null,
117     "id": "d8cfef5c-4546-4f11-bae7-f3701ecd0ac1",
118     "metadata": {},
119     "outputs": [],
120     "source": [
121      "X_test['target'] = y_test\n",
122      "X_test['prediction'] = preds_test"
123     ]
124    },
125    {
126     "cell_type": "code",
127     "execution_count": null,
128     "id": "ce98b770-e796-4b7b-a4fe-d3c0d3b70d20",
129     "metadata": {},
130     "outputs": [],
131     "source": [
132      "data_definition=DataDefinition(\n",
133      "        regression=[Regression()], #or you can specify parameters Regression(target='target', prediction='prediction')\n",
134      "        numerical_columns=features \n",
135      "    )"
136     ]
137    },
138    {
139     "cell_type": "code",
140     "execution_count": null,
141     "id": "e77f67c1-141f-4f30-9cfb-6734d1bcc66a",
142     "metadata": {},
143     "outputs": [],
144     "source": [
145      "reference = Dataset.from_pandas(\n",
146      "    pd.DataFrame(X_train),\n",
147      "    data_definition=data_definition,\n",
148      ")\n",
149      "\n",
150      "current = Dataset.from_pandas(\n",
151      "    pd.DataFrame(X_test),\n",
152      "    data_definition=data_definition,\n",
153      ")"
154     ]
155    },
156    {
157     "cell_type": "markdown",
158     "id": "6aaceaa0-cff9-4411-9c74-1728cdfcbe4f",
159     "metadata": {},
160     "source": [
161      "## Regression preset"
162     ]
163    },
164    {
165     "cell_type": "code",
166     "execution_count": null,
167     "id": "a676eae1-7dd7-494c-9a63-51e42949f4f2",
168     "metadata": {},
169     "outputs": [],
170     "source": [
171      "regression_preset = Report(metrics=[\n",
172      "    RegressionPreset()\n",
173      "    ],\n",
174      "    include_tests=True\n",
175      ")"
176     ]
177    },
178    {
179     "cell_type": "code",
180     "execution_count": null,
181     "id": "44a6d7d3-361f-491a-bd32-d9c20a733f55",
182     "metadata": {},
183     "outputs": [],
184     "source": [
185      "regression_report_no_ref = regression_preset.run(reference_data=None, current_data=current)"
186     ]
187    },
188    {
189     "cell_type": "code",
190     "execution_count": null,
191     "id": "934dca48-2018-4f3f-8393-ebea66987113",
192     "metadata": {},
193     "outputs": [],
194     "source": [
195      "regression_report_no_ref"
196     ]
197    },
198    {
199     "cell_type": "code",
200     "execution_count": null,
201     "id": "6fbfc469-c5fb-49d6-8317-9766f9061cdb",
202     "metadata": {},
203     "outputs": [],
204     "source": [
205      "regression_report = regression_preset.run(reference_data=reference, current_data=current)"
206     ]
207    },
208    {
209     "cell_type": "code",
210     "execution_count": null,
211     "id": "256cb571-4688-4537-a5e3-b8aea6ce8612",
212     "metadata": {},
213     "outputs": [],
214     "source": [
215      "regression_report"
216     ]
217    },
218    {
219     "cell_type": "code",
220     "execution_count": null,
221     "id": "ce14f8a2-5d2f-461e-b0c8-89ab28dfeba5",
222     "metadata": {},
223     "outputs": [],
224     "source": [
225      "regression_preset = Report(metrics=[\n",
226      "    RegressionPreset(\n",
227      "        mae_tests=[lt(0.3)],\n",
228      "        mean_error_tests=[gt(-0.2), lt(0.2)],\n",
229      "        mape_tests=[lt(20)],\n",
230      "        rmse_tests=[lt(0.3)],\n",
231      "        abs_max_error_tests=[lt(10)],\n",
232      "        r2score_tests=[gt(0.5)],\n",
233      "    )\n",
234      "])"
235     ]
236    },
237    {
238     "cell_type": "code",
239     "execution_count": null,
240     "id": "f50608f8-f777-4da1-88f6-95618a3073cb",
241     "metadata": {},
242     "outputs": [],
243     "source": [
244      "regression_report = regression_preset.run(reference_data=reference, current_data=current)"
245     ]
246    },
247    {
248     "cell_type": "code",
249     "execution_count": null,
250     "id": "60ff1b29-493a-48a0-bb82-f80fc2b525aa",
251     "metadata": {},
252     "outputs": [],
253     "source": [
254      "regression_report"
255     ]
256    },
257    {
258     "cell_type": "code",
259     "execution_count": null,
260     "id": "a99a97cd-6eb8-4a98-a06c-591a8b9d376e",
261     "metadata": {},
262     "outputs": [],
263     "source": [
264      "regression_preset = Report(metrics=[\n",
265      "    RegressionPreset(\n",
266      "        mae_tests=MeanStdMetricTests(mean=[lt(0.2)], std=[lt(0.4)]), \n",
267      "        mean_error_tests=MeanStdMetricTests(mean=[lt(0.2)], std=[lt(0.4)]) \n",
268      "    )\n",
269      "])\n"
270     ]
271    },
272    {
273     "cell_type": "code",
274     "execution_count": null,
275     "id": "6ce26791-a717-42ee-9136-b955d79393f8",
276     "metadata": {},
277     "outputs": [],
278     "source": [
279      "regression_report = regression_preset.run(reference_data=reference, current_data=current)"
280     ]
281    },
282    {
283     "cell_type": "code",
284     "execution_count": null,
285     "id": "fb5c2be1-fde8-4bc9-bc9f-b59781536e6d",
286     "metadata": {},
287     "outputs": [],
288     "source": [
289      "regression_report"
290     ]
291    },
292    {
293     "cell_type": "markdown",
294     "id": "6b55f5aa-bb7d-4a6a-8870-4cb3113b3ded",
295     "metadata": {},
296     "source": [
297      "## Regression quality"
298     ]
299    },
300    {
301     "cell_type": "code",
302     "execution_count": null,
303     "id": "7e57ab4b-38cc-441e-ba39-f6ff8bc7adc6",
304     "metadata": {},
305     "outputs": [],
306     "source": [
307      "quality_preset = Report(metrics=[\n",
308      "    RegressionQuality(),\n",
309      "    ],\n",
310      "    include_tests=True\n",
311      ")"
312     ]
313    },
314    {
315     "cell_type": "code",
316     "execution_count": null,
317     "id": "dd20e035-22d6-4a15-bf53-f3426d051e63",
318     "metadata": {},
319     "outputs": [],
320     "source": [
321      "quality_report_no_ref = quality_preset.run(reference_data=None, current_data=current)"
322     ]
323    },
324    {
325     "cell_type": "code",
326     "execution_count": null,
327     "id": "2b70a6b2-f9e5-46e6-a394-27fa245fbbb4",
328     "metadata": {},
329     "outputs": [],
330     "source": [
331      "quality_report_no_ref"
332     ]
333    },
334    {
335     "cell_type": "code",
336     "execution_count": null,
337     "id": "3a45672c-96eb-4f51-8c48-b2d5e5e9b823",
338     "metadata": {},
339     "outputs": [],
340     "source": [
341      "quality_report = quality_preset.run(reference_data=reference, current_data=current)"
342     ]
343    },
344    {
345     "cell_type": "code",
346     "execution_count": null,
347     "id": "99ad6211-d5a5-4fd8-a1eb-10803eb553ad",
348     "metadata": {},
349     "outputs": [],
350     "source": [
351      "quality_report"
352     ]
353    },
354    {
355     "cell_type": "code",
356     "execution_count": null,
357     "id": "2821f30d-2465-44df-9ca5-ae1bcd8dbee7",
358     "metadata": {},
359     "outputs": [],
360     "source": [
361      "quality_preset = Report(metrics=[\n",
362      "    RegressionQuality(\n",
363      "        mean_error_tests=[lt(0.1)], \n",
364      "        mae_tests=[lt(0.5)], \n",
365      "        mape_tests=[lt(20)],\n",
366      "        rmse_tests=[lt(0.5)],\n",
367      "    )\n",
368      "])"
369     ]
370    },
371    {
372     "cell_type": "code",
373     "execution_count": null,
374     "id": "372b4f8c-d15c-4847-9653-fe91c1e03b1c",
375     "metadata": {},
376     "outputs": [],
377     "source": [
378      "quality_report_with_metrics = quality_preset.run(reference_data=reference, current_data=current)"
379     ]
380    },
381    {
382     "cell_type": "code",
383     "execution_count": null,
384     "id": "91eb51fd-842a-4cad-bdab-9a8bdad1a75f",
385     "metadata": {},
386     "outputs": [],
387     "source": [
388      "quality_report_with_metrics"
389     ]
390    },
391    {
392     "cell_type": "code",
393     "execution_count": null,
394     "id": "8aebae45-4ed0-4302-b67b-239e2a65cadf",
395     "metadata": {},
396     "outputs": [],
397     "source": [
398      "quality_preset = Report(metrics=[\n",
399      "    RegressionQuality(\n",
400      "        mean_error_tests=MeanStdMetricTests(mean=[lt(0.2)], std=[lt(0.4)])\n",
401      "    )\n",
402      "])"
403     ]
404    },
405    {
406     "cell_type": "code",
407     "execution_count": null,
408     "id": "eaa97466-03a3-4612-a7be-9771a1fbe0d7",
409     "metadata": {},
410     "outputs": [],
411     "source": [
412      "quality_report_mean_std_tests = quality_preset.run(reference_data=reference, current_data=current)"
413     ]
414    },
415    {
416     "cell_type": "code",
417     "execution_count": null,
418     "id": "aa070e26-e89d-4630-889a-8377947e91e4",
419     "metadata": {},
420     "outputs": [],
421     "source": [
422      "quality_report_mean_std_tests"
423     ]
424    },
425    {
426     "cell_type": "markdown",
427     "id": "b17c5555-9f56-4204-ad67-393a4305a546",
428     "metadata": {},
429     "source": [
430      "## Regression dummy quality"
431     ]
432    },
433    {
434     "cell_type": "code",
435     "execution_count": null,
436     "id": "44e1672c-ef96-4b2c-af30-004947b60be3",
437     "metadata": {},
438     "outputs": [],
439     "source": [
440      "dummy_quality_preset = Report(metrics=[\n",
441      "    RegressionDummyQuality(),\n",
442      "    ],\n",
443      "    include_tests=True\n",
444      ")"
445     ]
446    },
447    {
448     "cell_type": "code",
449     "execution_count": null,
450     "id": "7abe022e-c1d2-41c7-9d84-872df1d9a61e",
451     "metadata": {},
452     "outputs": [],
453     "source": [
454      "dummy_quality_report_no_ref = dummy_quality_preset.run(reference_data=None, current_data=current)"
455     ]
456    },
457    {
458     "cell_type": "code",
459     "execution_count": null,
460     "id": "87df0dee-8b12-451c-af4e-3fef7a18e27c",
461     "metadata": {},
462     "outputs": [],
463     "source": [
464      "dummy_quality_report_no_ref"
465     ]
466    },
467    {
468     "cell_type": "code",
469     "execution_count": null,
470     "id": "99c8dd71-1331-485d-9220-b2e54f311ea9",
471     "metadata": {},
472     "outputs": [],
473     "source": [
474      "dummy_quality_report = dummy_quality_preset.run(reference_data=reference, current_data=current)"
475     ]
476    },
477    {
478     "cell_type": "code",
479     "execution_count": null,
480     "id": "9e6997c6-363d-4ef3-a753-ebd88d93ee8c",
481     "metadata": {},
482     "outputs": [],
483     "source": [
484      "dummy_quality_report"
485     ]
486    },
487    {
488     "cell_type": "code",
489     "execution_count": null,
490     "id": "cba79141-0cf0-453d-9433-a083da487512",
491     "metadata": {},
492     "outputs": [],
493     "source": [
494      "dummy_quality_preset = Report(metrics=[\n",
495      "    RegressionDummyQuality(\n",
496      "        mae_tests=[lt(0.5)], \n",
497      "        mape_tests=[lt(20)],\n",
498      "        rmse_tests=[lt(0.5)],\n",
499      "        #max_error_test to be implemented\n",
500      "    )],\n",
501      ")"
502     ]
503    },
504    {
505     "cell_type": "code",
506     "execution_count": null,
507     "id": "194e8a0a-97b8-4796-ae71-b5841b788d65",
508     "metadata": {},
509     "outputs": [],
510     "source": [
511      "dummy_quality_report = dummy_quality_preset.run(reference_data=reference, current_data=current)"
512     ]
513    },
514    {
515     "cell_type": "code",
516     "execution_count": null,
517     "id": "d5e21ee3-713a-4917-ae4e-17267fb830f7",
518     "metadata": {},
519     "outputs": [],
520     "source": [
521      "dummy_quality_report"
522     ]
523    },
524    {
525     "cell_type": "code",
526     "execution_count": null,
527     "id": "9237a5bb-ac12-44dd-b553-511ccf7bd310",
528     "metadata": {},
529     "outputs": [],
530     "source": []
531    },
532    {
533     "cell_type": "code",
534     "execution_count": null,
535     "id": "8a977e76-8053-4376-b172-3bfd4741f4d2",
536     "metadata": {},
537     "outputs": [],
538     "source": []
539    }
540   ],
541   "metadata": {
542    "kernelspec": {
543     "display_name": "Python 3 (ipykernel)",
544     "language": "python",
545     "name": "python3"
546    },
547    "language_info": {
548     "codemirror_mode": {
549      "name": "ipython",
550      "version": 3
551     },
552     "file_extension": ".py",
553     "mimetype": "text/x-python",
554     "name": "python",
555     "nbconvert_exporter": "python",
556     "pygments_lexer": "ipython3",
557     "version": "3.11.11"
558    }
559   },
560   "nbformat": 4,
561   "nbformat_minor": 5
562  }