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 }