{ "cells": [ { "cell_type": "markdown", "id": "3922e738", "metadata": {}, "source": [ "# 01 - Exploratory Data Analysis" ] }, { "cell_type": "markdown", "id": "b15bd281", "metadata": {}, "source": [ "**Model objective:** classify task duration into duration buckets, such as Short, Standard, or Long-Running, using relevant raw Jira ticket fields." ] }, { "cell_type": "markdown", "id": "3a1f0ff9", "metadata": {}, "source": [ "### 01-01 Loading Raw Dataset\n" ] }, { "cell_type": "markdown", "id": "4590b01f", "metadata": {}, "source": [ "Load the raw Jira CSV and the plotting tools used throughout this notebook.\n", "\n", "- **Pandas** handles tabular inspection and data manipulation.\n", "- **Matplotlib** provides lightweight plots for quick EDA.\n", "\n", "The goal here is not to clean the dataset yet. This notebook identifies the main data-quality issues that the next notebook should handle.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "6ac4b268", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "ticket_df = pd.read_csv('../jira_ticket_dataset.csv')" ] }, { "cell_type": "markdown", "id": "7df1b372", "metadata": {}, "source": [ "## 01-02 Dataset shape and memory inspection\n", "\n", "Start by inspecting the dataset size, memory usage, column types, and a small sample of rows. These checks give a quick sense of whether the data is large, sparse, or mixed-type before selecting features." ] }, { "cell_type": "code", "execution_count": 2, "id": "8d6cd8ef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rows: 1,149,323\n", "Columns: 37\n" ] }, { "data": { "text/plain": [ "str 26\n", "float64 10\n", "object 1\n", "Name: column_count, dtype: int64" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 1149323 entries, 0 to 1149322\n", "Data columns (total 37 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 id 1131224 non-null float64\n", " 1 key 1149323 non-null str \n", " 2 summary 1131223 non-null str \n", " 3 resolution.id 946655 non-null float64\n", " 4 resolution.description 928770 non-null str \n", " 5 resolution.name 946655 non-null str \n", " 6 priority.id 1117464 non-null float64\n", " 7 priority.name 1117464 non-null str \n", " 8 labels 1131004 non-null str \n", " 9 assignee 780217 non-null str \n", " 10 status.id 1131224 non-null float64\n", " 11 status.description 1123393 non-null str \n", " 12 status.name 1131224 non-null str \n", " 13 statusCategory.id 1131224 non-null float64\n", " 14 statusCategory.key 1131224 non-null str \n", " 15 statusCategory.colorName 1131224 non-null str \n", " 16 statusCategory.name 1131224 non-null str \n", " 17 customfield_12310921 15834 non-null str \n", " 18 creator 1127737 non-null str \n", " 19 subtasks 1131224 non-null str \n", " 20 reporter 1130088 non-null str \n", " 21 votes.votes 1131224 non-null float64\n", " 22 issuetype.id 1131224 non-null float64\n", " 23 issuetype.description 1130064 non-null str \n", " 24 issuetype.name 1131224 non-null str \n", " 25 issuetype.subtask 1131224 non-null object \n", " 26 project.id 1131224 non-null float64\n", " 27 project.key 1131224 non-null str \n", " 28 project.name 1131224 non-null str \n", " 29 projectCategory.id 1049679 non-null float64\n", " 30 projectCategory.description 926376 non-null str \n", " 31 projectCategory.name 1049679 non-null str \n", " 32 resolutiondate 946715 non-null str \n", " 33 watches.watchCount 1131224 non-null float64\n", " 34 created 1131224 non-null str \n", " 35 updated 1131224 non-null str \n", " 36 description 1026080 non-null str \n", "dtypes: float64(10), object(1), str(26)\n", "memory usage: 3.2 GB\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idkeysummaryresolution.idresolution.descriptionresolution.namepriority.idpriority.namelabelsassignee...project.keyproject.nameprojectCategory.idprojectCategory.descriptionprojectCategory.nameresolutiondatewatches.watchCountcreatedupdateddescription
36292112523653.0SMXCOMP-905ensure DONE status is set when cxf bc consumer...1.0A fix for this issue is checked into the tree ...Fixed3.0Major[]83fabe05...SMXCOMPServiceMix Components10480.0ServiceMix Enterprise Service BusServiceMix2011-09-20 07:03:490.02011-09-20 06:26:442011-09-20 07:03:49this can prevent potential thread leak
43107112722862.0UIMA-3908Review UIMA-AS support for running with embedd...3.0The problem is a duplicate of an existing issue.Duplicate3.0Major[]baaaf95c...UIMAUIMA10410.0Apache UIMAUIMA2014-06-27 19:21:371.02014-06-20 22:39:192014-06-27 19:21:37UIMA-AS needs to support embedded AMQ broker. ...
58005413095949.0LIVY-311Set classpath in MiniCluster only when it is n...1.0A fix for this issue is checked into the tree ...Fixed3.0Major[]46920e83...LIVYLivyNaNNaNNaN2017-02-16 01:19:181.02017-02-08 06:23:572017-02-16 01:19:18NaN
16468012704840.0SPARK-859Remove the executor count from the header1.0A fix for this issue is checked into the tree ...Fixed3.0Major[]3b73e472...SPARKSparkNaNNaNNaN2013-08-06 21:57:271.02013-08-05 15:12:062013-08-06 21:57:27NaN
99434013585790.0HUDI-7988ListingBasedRollbackStrategy support logcompact1.0A fix for this issue is checked into the tree ...Fixed3.0Major['pull-request-available']99fd0329...HUDIApache HudiNaNNaNNaN2024-07-17 09:42:271.02024-07-15 08:06:352024-07-17 09:42:27[1. https://github.com/apache/hudi/issues/1158...
\n", "

5 rows × 37 columns

\n", "
" ], "text/plain": [ " id key \\\n", "362921 12523653.0 SMXCOMP-905 \n", "431071 12722862.0 UIMA-3908 \n", "580054 13095949.0 LIVY-311 \n", "164680 12704840.0 SPARK-859 \n", "994340 13585790.0 HUDI-7988 \n", "\n", " summary resolution.id \\\n", "362921 ensure DONE status is set when cxf bc consumer... 1.0 \n", "431071 Review UIMA-AS support for running with embedd... 3.0 \n", "580054 Set classpath in MiniCluster only when it is n... 1.0 \n", "164680 Remove the executor count from the header 1.0 \n", "994340 ListingBasedRollbackStrategy support logcompact 1.0 \n", "\n", " resolution.description resolution.name \\\n", "362921 A fix for this issue is checked into the tree ... Fixed \n", "431071 The problem is a duplicate of an existing issue. Duplicate \n", "580054 A fix for this issue is checked into the tree ... Fixed \n", "164680 A fix for this issue is checked into the tree ... Fixed \n", "994340 A fix for this issue is checked into the tree ... Fixed \n", "\n", " priority.id priority.name labels assignee ... \\\n", "362921 3.0 Major [] 83fabe05 ... \n", "431071 3.0 Major [] baaaf95c ... \n", "580054 3.0 Major [] 46920e83 ... \n", "164680 3.0 Major [] 3b73e472 ... \n", "994340 3.0 Major ['pull-request-available'] 99fd0329 ... \n", "\n", " project.key project.name projectCategory.id \\\n", "362921 SMXCOMP ServiceMix Components 10480.0 \n", "431071 UIMA UIMA 10410.0 \n", "580054 LIVY Livy NaN \n", "164680 SPARK Spark NaN \n", "994340 HUDI Apache Hudi NaN \n", "\n", " projectCategory.description projectCategory.name \\\n", "362921 ServiceMix Enterprise Service Bus ServiceMix \n", "431071 Apache UIMA UIMA \n", "580054 NaN NaN \n", "164680 NaN NaN \n", "994340 NaN NaN \n", "\n", " resolutiondate watches.watchCount created \\\n", "362921 2011-09-20 07:03:49 0.0 2011-09-20 06:26:44 \n", "431071 2014-06-27 19:21:37 1.0 2014-06-20 22:39:19 \n", "580054 2017-02-16 01:19:18 1.0 2017-02-08 06:23:57 \n", "164680 2013-08-06 21:57:27 1.0 2013-08-05 15:12:06 \n", "994340 2024-07-17 09:42:27 1.0 2024-07-15 08:06:35 \n", "\n", " updated description \n", "362921 2011-09-20 07:03:49 this can prevent potential thread leak \n", "431071 2014-06-27 19:21:37 UIMA-AS needs to support embedded AMQ broker. ... \n", "580054 2017-02-16 01:19:18 NaN \n", "164680 2013-08-06 21:57:27 NaN \n", "994340 2024-07-17 09:42:27 [1. https://github.com/apache/hudi/issues/1158... \n", "\n", "[5 rows x 37 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(f\"Rows: {ticket_df.shape[0]:,}\")\n", "print(f\"Columns: {ticket_df.shape[1]:,}\")\n", "\n", "display(ticket_df.dtypes.value_counts().rename(\"column_count\"))\n", "ticket_df.info(memory_usage=\"deep\")\n", "\n", "ticket_df.sample(5, random_state=42)" ] }, { "cell_type": "markdown", "id": "13d2fae6", "metadata": {}, "source": [ "## 01-03 Selected feature availability\n", "\n", "Based on the dataframe inspection, the most relevant raw features to keep for initial modeling are:\n", "\n", "- **summary**: ticket title or short task description\n", "- **description**: longer issue details\n", "- **priority.name**: priority category\n", "- **labels**: assigned Jira labels\n", "- **issuetype.description**: description of the issue type\n", "- **issuetype.name**: issue type label\n", "- **issuetype.subtask**: whether the issue is a subtask\n", "- **resolutiondate**: timestamp used to derive duration\n", "- **created**: timestamp used to derive duration\n", "\n", "Before narrowing the dataframe, check that each selected feature exists and how complete it is." ] }, { "cell_type": "code", "execution_count": 2, "id": "a338be16", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
featureavailablenon_missing_countnon_missing_percent
0summaryTrue113122398.425160
1descriptionTrue102608089.276905
2priority.nameTrue111746497.228020
3labelsTrue113100498.406105
4issuetype.descriptionTrue113006498.324318
5issuetype.nameTrue113122498.425247
6issuetype.subtaskTrue113122498.425247
7resolutiondateTrue94671582.371535
8createdTrue113122498.425247
\n", "
" ], "text/plain": [ " feature available non_missing_count non_missing_percent\n", "0 summary True 1131223 98.425160\n", "1 description True 1026080 89.276905\n", "2 priority.name True 1117464 97.228020\n", "3 labels True 1131004 98.406105\n", "4 issuetype.description True 1130064 98.324318\n", "5 issuetype.name True 1131224 98.425247\n", "6 issuetype.subtask True 1131224 98.425247\n", "7 resolutiondate True 946715 82.371535\n", "8 created True 1131224 98.425247" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
summarydescriptionpriority.namelabelsissuetype.descriptionissuetype.nameissuetype.subtaskresolutiondatecreated
0Update config browser to work with the new syntaxThe config browser used Velocity calling the t...Minor[]An improvement or enhancement to an existing f...ImprovementFalse2005-01-01 07:50:462005-01-01 07:47:50
1XALAN_C 1.9 or current do not build on Fedora ...Two types of errors:\\n1- runConfigure and conf...Blocker[]A problem which impairs or prevents the functi...BugFalse2004-12-30 05:30:362004-12-25 22:50:30
2Problem with ADD new post, and DELETE post.When trying to add new post, I was getting nex...Critical[]A problem which impairs or prevents the functi...BugFalse2005-01-02 15:21:002005-01-01 13:52:46
3LogHandler can only work in GlobalConfiguratio...org.apache.axis.handlers.LogHandler in request...Major[]A problem which impairs or prevents the functi...BugFalseNaN2005-01-02 19:13:37
4Decoding of service is broken in org.apache.ax...The following code assumes a lot of things:\\n\\...Major[]A problem which impairs or prevents the functi...BugFalseNaN2005-01-03 03:34:52
\n", "
" ], "text/plain": [ " summary \\\n", "0 Update config browser to work with the new syntax \n", "1 XALAN_C 1.9 or current do not build on Fedora ... \n", "2 Problem with ADD new post, and DELETE post. \n", "3 LogHandler can only work in GlobalConfiguratio... \n", "4 Decoding of service is broken in org.apache.ax... \n", "\n", " description priority.name labels \\\n", "0 The config browser used Velocity calling the t... Minor [] \n", "1 Two types of errors:\\n1- runConfigure and conf... Blocker [] \n", "2 When trying to add new post, I was getting nex... Critical [] \n", "3 org.apache.axis.handlers.LogHandler in request... Major [] \n", "4 The following code assumes a lot of things:\\n\\... Major [] \n", "\n", " issuetype.description issuetype.name \\\n", "0 An improvement or enhancement to an existing f... Improvement \n", "1 A problem which impairs or prevents the functi... Bug \n", "2 A problem which impairs or prevents the functi... Bug \n", "3 A problem which impairs or prevents the functi... Bug \n", "4 A problem which impairs or prevents the functi... Bug \n", "\n", " issuetype.subtask resolutiondate created \n", "0 False 2005-01-01 07:50:46 2005-01-01 07:47:50 \n", "1 False 2004-12-30 05:30:36 2004-12-25 22:50:30 \n", "2 False 2005-01-02 15:21:00 2005-01-01 13:52:46 \n", "3 False NaN 2005-01-02 19:13:37 \n", "4 False NaN 2005-01-03 03:34:52 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_feature_columns = [\n", " \"summary\",\n", " \"description\",\n", " \"priority.name\",\n", " \"labels\",\n", " \"issuetype.description\",\n", " \"issuetype.name\",\n", " \"issuetype.subtask\",\n", " \"resolutiondate\",\n", " \"created\",\n", "]\n", "\n", "feature_availability = pd.DataFrame({\n", " \"feature\": raw_feature_columns,\n", " \"available\": [column in ticket_df.columns for column in raw_feature_columns],\n", "})\n", "feature_availability[\"non_missing_count\"] = [\n", " ticket_df[column].notna().sum() if column in ticket_df.columns else 0\n", " for column in raw_feature_columns\n", "]\n", "feature_availability[\"non_missing_percent\"] = (\n", " feature_availability[\"non_missing_count\"] / len(ticket_df) * 100\n", ")\n", "\n", "display(feature_availability)\n", "\n", "ticket_df = ticket_df[raw_feature_columns].copy()\n", "ticket_df.head()" ] }, { "cell_type": "markdown", "id": "cc04c4b0", "metadata": {}, "source": [ "## 01-04 Missing values\n", "\n", "Missing values are one of the first issues to inspect because they determine what can safely move into the cleaning notebook.\n", "\n", "For this project, **created**, **resolutiondate**, and **summary** are non-negotiable fields:\n", "\n", "- missing **created** or **resolutiondate** means `duration_days` cannot be calculated.\n", "- missing **summary** removes a key text signal for model training.\n", "\n", "The next plots show where missingness is concentrated and how much of the selected dataset is affected." ] }, { "cell_type": "code", "execution_count": 3, "id": "dcf9d3f2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
missing_countmissing_percent
resolutiondate20260817.628465
description12324310.723095
priority.name318592.771980
issuetype.description192591.675682
labels183191.593895
summary181001.574840
issuetype.name180991.574753
issuetype.subtask180991.574753
created180991.574753
\n", "
" ], "text/plain": [ " missing_count missing_percent\n", "resolutiondate 202608 17.628465\n", "description 123243 10.723095\n", "priority.name 31859 2.771980\n", "issuetype.description 19259 1.675682\n", "labels 18319 1.593895\n", "summary 18100 1.574840\n", "issuetype.name 18099 1.574753\n", "issuetype.subtask 18099 1.574753\n", "created 18099 1.574753" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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Li4q7729vaGhoYHw8HAAwIYNG9CiRQtYW1sXek5Tp05Famqq+Lp161aRfUBEREREVJ4xWSsD6urqOHDgAPbs2YOaNWtixYoVcHBwQGJiItTU1PJNh8zKysrXhqampvhz3rTCgrbl5uYWWCevTEHb8uo8e/YMbdu2hb6+Pn799VfExMSIyVdmZqZKPT09PZX3Wlpa6NevH4KDg5GZmYn//e9/KqN0BZHL5TAwMFB5ERERERF9rpislRGZTAZ3d3cEBgYiNjYWWlpaCA8Ph6mpKe7evSuWy8nJwaVLl8okxitXruDhw4dYsGABmjVrBkdHR5VRt+IMGjQIBw8exKpVq5CVlYVu3bp9wGiJiIiIiMoXPrNWBqKjo3Ho0CG0bdsWFStWRHR0NB48eIAaNWpAT08P48aNw+7du1GtWjUsXboUT548KZM4q1atCi0tLaxYsQLDhg3DpUuXMHv27BLXr1GjBpo0aYLJkyfDz88POjo6HzBaIiIiIqLyhclaGTAwMMDRo0exbNkypKWlwcrKCosXL0b79u2RlZWFuLg4+Pj4QENDA2PHjkWLFi3KJE5TU1OEhITgu+++w/Lly1G/fn0sWrQIXbp0KXEbAwcOxMmTJ4udAklERERERKpkAr/0ij6guXPnYsuWLbh48WKp66alpUGpVMJyzFaoyXU/QHTSkrSgY1mHQEREREQfWN5n3NTU1GLXaOAza/RBpKenIyYmBitWrMCoUaPKOhwiIiIiok8OkzX6IEaOHImmTZvCw8ODUyCJiIiIiN4Cn1mjDyIkJAQhISFlHQYRERER0SeLyRpJ3qVAL37nGhERERF9djgNkoiIiIiISIKYrBEREREREUkQkzUiIiIiIiIJYrJGREREREQkQUzWiIiIiIiIJIjJGhERERERkQQxWSMiIiIiIpIgJmtEREREREQSxGSNiIiIiIhIgpisERERERERSRCTNSIiIiIiIgliskZERERERCRBTNaIiIiIiIgkiMkaERERERGRBDFZIyIiIiIikiAma0RERERERBLEZI2IiIiIiEiCmKwRERERERFJkEZZB0BUnNoz90FNrlvWYXxwSQs6lnUIRERERCQhHFkjIiIiIiKSICZrREREREREEsRkjYiIiIiISIKYrNFHExAQgLp165Z1GEREREREnwQma1QkJlhERERERGWDyVo5lZWVVdYhEBERERHRO2Cy9gnJzc3FwoULUb16dcjlclStWhVz585FUlISZDIZtm7dCk9PT2hra+PXX38FAAQHB6NGjRrQ1taGo6MjVq1apdLm5MmTYW9vD11dXdja2mLGjBliohcSEoLAwEDExcVBJpNBJpMhJCQEAJCamoohQ4agYsWKMDAwQMuWLREXF6fS9oIFC2BmZgaFQoGBAwfi5cuXH76TiIiIiIjKCX7P2idk6tSpWLduHZYuXYqmTZvi7t27uHLlirh/8uTJWLx4MYKDgyGXy7Fu3TrMnDkTP/74I+rVq4fY2FgMHjwYenp66N+/PwBAoVAgJCQEFhYWuHjxIgYPHgyFQoFJkyahd+/euHTpEvbu3YuDBw8CAJRKJQRBQMeOHWFsbIyIiAgolUqsXbsWrVq1wtWrV2FsbIytW7di5syZWLlyJZo1a4ZNmzZh+fLlsLW1LfT8MjIykJGRIb5PS0v7QD1JRERERCR9MkEQhLIOgor39OlTmJqa4scff8SgQYNU9iUlJcHGxgbLli3D6NGjxe1Vq1bFwoUL0bdvX3HbnDlzEBERgZMnTxZ4nO+//x6//fYbzpw5A+DVM2s7duzA+fPnxTKRkZH44osvkJKSArlcLm6vXr06Jk2ahCFDhsDNzQ3Ozs5YvXq1uL9JkyZ4+fKlSluvCwgIQGBgYL7tlmO28kuxiYiIiKhcSEtLg1KpRGpqKgwMDIosy5G1T0R8fDwyMjLQqlWrQsu4uLiIPz948AC3bt3CwIEDMXjwYHF7dnY2lEql+H7btm1YtmwZ/vnnH6SnpyM7O7vYm+bs2bNIT0+HiYmJyvYXL17g+vXrYrzDhg1T2e/q6orDhw8X2u7UqVMxbtw48X1aWhosLS2LjIWIiIiIqLxisvaJ0NHRKbaMnp6e+HNubi4AYN26dWjcuLFKOXV1dQDAqVOn0KdPHwQGBsLLywtKpRJbtmzB4sWLizxObm4uKlWqhKioqHz7DA0Ni42zMHK5XGWkjoiIiIjoc8Zk7RNhZ2cHHR0dHDp0KN80yIKYmZmhcuXKuHHjBr766qsCy5w4cQJWVlaYNm2auO3mzZsqZbS0tJCTk6OyrX79+rh37x40NDRgbW1dYNs1atTAqVOn4OPjI247depUsXETEREREdErTNY+Edra2pg8eTImTZoELS0tuLu748GDB/j7778LnRoZEBCAUaNGwcDAAO3bt0dGRgbOnDmDx48fY9y4cahevTqSk5OxZcsWNGzYELt370Z4eLhKG9bW1khMTMT58+dRpUoVKBQKtG7dGq6urvD29sbChQvh4OCAf//9FxEREfD29oaLiwtGjx6N/v37w8XFBU2bNsXmzZvx999/F7nACBERERER/R8u3f8JmTFjBsaPHw9/f3/UqFEDvXv3RkpKSqHlBw0ahJ9//hkhISFwcnKCh4cHQkJCYGNjAwDo2rUrxo4di5EjR6Ju3bo4efIkZsyYodJG9+7d0a5dO7Ro0QKmpqYIDQ2FTCZDREQEmjdvDj8/P9jb26NPnz5ISkqCmZkZAKB3797w9/fH5MmT0aBBA9y8eRPffPPNh+scIiIiIqJyhqtBkmTlrZTD1SCJiIiIqLwozWqQHFkjIiIiIiKSICZrREREREREEsRkjYiIiIiISIK4GiRJ3qVAr2Ln8xIRERERlTccWSMiIiIiIpIgJmtEREREREQSxGSNiIiIiIhIgpisERERERERSRCTNSIiIiIiIgliskZERERERCRBTNaIiIiIiIgkiMkaERERERGRBDFZIyIiIiIikiAma0RERERERBLEZI2IiIiIiEiCmKwRERERERFJEJM1IiIiIiIiCWKyRkREREREJEFM1oiIiIiIiCSIyRoREREREZEEMVkjIiIiIiKSICZrREREREREEqRR1gEQFaf2zH1Qk+uWdRgfXNKCjmUdAhERERFJCEfWiIiIiIiIJIjJGhERERERkQQxWSMiIiIiIpIgJmtEREREREQSJJlkzdPTE2PGjCnrMModmUyGHTt2fPTjWltbY9myZR/9uERERERE5YVkkrWwsDDMnj27rMNASEgIDA0NyzqMjyYpKQkymQznz58v61CIiIiIiOg1klm639jYuKxDICIiIiIikgzJjKy9Pg1y1apVsLOzg7a2NszMzNCjRw+x3LZt2+Dk5AQdHR2YmJigdevWePbsWb428nh7e8PX11d8n5mZiUmTJqFy5crQ09ND48aNERUVBQCIiorCgAEDkJqaCplMBplMhoCAAMyaNQtOTk75Ym7QoAH8/f0BAL6+vvD29kZgYCAqVqwIAwMDDB06FJmZmWJ5QRAQFBQEW1tb6OjowNnZGdu2bSuyX4rqi4KmGtatWxcBAQEq2+7evYv27dtDR0cHNjY2+P3338V9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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "missing_table = pd.DataFrame({\n", " \"missing_count\": ticket_df.isna().sum(),\n", " \"missing_percent\": ticket_df.isna().mean() * 100\n", "}).sort_values(\"missing_percent\", ascending=False)\n", "\n", "display(missing_table)\n", "\n", "\n", "fig, ax = plt.subplots(figsize=(9, 4.5))\n", "missing_table[\"missing_percent\"].sort_values().plot(\n", " kind=\"barh\",\n", " ax=ax,\n", " title=\"Missing Value Percentage by Selected Raw Feature\"\n", ")\n", "\n", "ax.set_xlabel(\"Missing rows (%)\")\n", "ax.set_ylabel(\"\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b183621d", "metadata": {}, "source": [ "**Rows with missing resolutiondate cannot be used for the first duration classification model because the target duration cannot be calculated.**\n", "\n", "This chart highlights which selected raw features have the highest missing-value rates. A high missing percentage does not always mean a column is useless, but it does mean the cleaning notebook must handle that field deliberately.\n" ] }, { "cell_type": "markdown", "id": "ad84493f", "metadata": {}, "source": [ "#### Check most frequent values and their percentages\n", "\n", "It can help to see if theree exists an overarching variable that skews any raw feature." ] }, { "cell_type": "code", "execution_count": 4, "id": "e95de007", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
most_freq_variablemost_freq_percentage
summaryHDFS Web UI displays comments from dfs.exclude...0.015293
descriptionI am putting comments in dfs.exclude file such...0.011500
priority.nameMajor66.784165
labels[]82.050727
issuetype.descriptionAn improvement or enhancement to an existing f...50.162823
issuetype.nameImprovement50.111384
issuetype.subtaskFalse90.894642
resolutiondate2009-09-16 00:26:500.091791
created2008-07-14 22:44:580.002298
\n", "
" ], "text/plain": [ " most_freq_variable \\\n", "summary HDFS Web UI displays comments from dfs.exclude... \n", "description I am putting comments in dfs.exclude file such... \n", "priority.name Major \n", "labels [] \n", "issuetype.description An improvement or enhancement to an existing f... \n", "issuetype.name Improvement \n", "issuetype.subtask False \n", "resolutiondate 2009-09-16 00:26:50 \n", "created 2008-07-14 22:44:58 \n", "\n", " most_freq_percentage \n", "summary 0.015293 \n", "description 0.011500 \n", "priority.name 66.784165 \n", "labels 82.050727 \n", "issuetype.description 50.162823 \n", "issuetype.name 50.111384 \n", "issuetype.subtask 90.894642 \n", "resolutiondate 0.091791 \n", "created 0.002298 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# normalize=True finds the column varaiable count percentage between 0 - 1 then we use max to find the most frequent and find the percentage \n", "\n", "most_freq = pd.DataFrame({\n", " \"most_freq_variable\": ticket_df.value_counts().idxmax(),\n", " \"most_freq_percentage\": ticket_df.apply(lambda x: x.value_counts(normalize=True).max() * 100)\n", "})\n", "\n", "display(most_freq)" ] }, { "cell_type": "markdown", "id": "dcd7ab92", "metadata": {}, "source": [ "It can be concluded that multiple of the chosen features can be further removed due to not being useful.\n", "\n", "Such features we might have to take into consideration in removing or modifying are as follows:\n", "\n", "- **labels**\n", "- **issuetype.description**\n", "- **issuetype.subtask** \n", "\n", "For simplicity it is better to remove these features, keeping our current raw features to:\n", "\n", "- **summary**: ticket title or short task description\n", "- **description**: longer issue details\n", "- **priority.name**: priority category\n", "- **issuetype.name**: issue type label\n", "- **resolutiondate**: timestamp used to derive duration\n", "- **created**: timestamp used to derive duration" ] }, { "cell_type": "code", "execution_count": 5, "id": "35e27c4d", "metadata": {}, "outputs": [], "source": [ "ticket_df = ticket_df.drop(columns=[\"labels\", \"issuetype.description\", \"issuetype.subtask\"])" ] }, { "cell_type": "markdown", "id": "4bd79e07", "metadata": {}, "source": [ "Let's take a final look at our current raw features." ] }, { "cell_type": "code", "execution_count": 6, "id": "774993fe", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
summarydescriptionpriority.nameissuetype.nameresolutiondatecreated
362921ensure DONE status is set when cxf bc consumer...this can prevent potential thread leakMajorBug2011-09-20 07:03:492011-09-20 06:26:44
431071Review UIMA-AS support for running with embedd...UIMA-AS needs to support embedded AMQ broker. ...MajorBug2014-06-27 19:21:372014-06-20 22:39:19
580054Set classpath in MiniCluster only when it is n...NaNMajorImprovement2017-02-16 01:19:182017-02-08 06:23:57
\n", "
" ], "text/plain": [ " summary \\\n", "362921 ensure DONE status is set when cxf bc consumer... \n", "431071 Review UIMA-AS support for running with embedd... \n", "580054 Set classpath in MiniCluster only when it is n... \n", "\n", " description priority.name \\\n", "362921 this can prevent potential thread leak Major \n", "431071 UIMA-AS needs to support embedded AMQ broker. ... Major \n", "580054 NaN Major \n", "\n", " issuetype.name resolutiondate created \n", "362921 Bug 2011-09-20 07:03:49 2011-09-20 06:26:44 \n", "431071 Bug 2014-06-27 19:21:37 2014-06-20 22:39:19 \n", "580054 Improvement 2017-02-16 01:19:18 2017-02-08 06:23:57 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ticket_df.sample(n=3, random_state=42)" ] }, { "cell_type": "markdown", "id": "86d691e1", "metadata": {}, "source": [ "## 01-05 Timestamp quality checks\n", "\n", "The timestamp are checked by the following:\n", "\n", "- Can **created** and **resolutiondate** be converted to datetime values?\n", "- Are there extreme minimum or maximum dates that should be reviewed?\n", "- Are there rows where **resolutiondate** happens before **created**?" ] }, { "cell_type": "code", "execution_count": null, "id": "d09e1bc2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
missing_or_invalid_countearliest_valuelatest_value
created183882000-10-19 09:27:07+00:002024-11-06 15:59:21+00:00
resolutiondate2026082002-05-10 18:54:17+00:002025-03-04 04:00:30+00:00
\n", "
" ], "text/plain": [ " missing_or_invalid_count earliest_value \\\n", "created 18388 2000-10-19 09:27:07+00:00 \n", "resolutiondate 202608 2002-05-10 18:54:17+00:00 \n", "\n", " latest_value \n", "created 2024-11-06 15:59:21+00:00 \n", "resolutiondate 2025-03-04 04:00:30+00:00 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Rows where resolutiondate is before created: 18\n" ] } ], "source": [ "# Convert dates to datetime for EDA checks.\n", "ticket_df[\"created\"] = pd.to_datetime(\n", " ticket_df[\"created\"],\n", " errors=\"coerce\",\n", " utc=True,\n", ")\n", "\n", "ticket_df[\"resolutiondate\"] = pd.to_datetime(\n", " ticket_df[\"resolutiondate\"],\n", " errors=\"coerce\",\n", " utc=True,\n", ")\n", "\n", "timestamp_quality = pd.DataFrame({\n", " \"missing_or_invalid_count\": ticket_df[[\"created\", \"resolutiondate\"]].isna().sum(),\n", " \"earliest_value\": ticket_df[[\"created\", \"resolutiondate\"]].min(),\n", " \"latest_value\": ticket_df[[\"created\", \"resolutiondate\"]].max(),\n", "})\n", "\n", "display(timestamp_quality)\n", "\n", "invalid_duration_count = (ticket_df[\"resolutiondate\"] < ticket_df[\"created\"]).sum()\n", "print(f\"Rows where resolutiondate is before created: {invalid_duration_count:,}\")" ] }, { "cell_type": "markdown", "id": "830bc5bb", "metadata": {}, "source": [ "## 01-06 Duration target exploration\n", "\n", "The main target feature is `duration_days`, calculated as:\n", "\n", "`duration_days = resolutiondate - created`\n", "\n", "This section inspects the raw numeric target before creating classes. The goal is to understand spread, missing values, negative values, and extreme values at a basic level." ] }, { "cell_type": "code", "execution_count": 8, "id": "d344502c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 946426.000000\n", "mean 203.954379\n", "std 520.375742\n", "min -0.372951\n", "25% 1.049771\n", "50% 11.915307\n", "75% 112.017925\n", "max 8001.517257\n", "Name: duration_days, dtype: float64" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Missing duration rows: 202,897\n", "Negative duration rows: 18\n" ] } ], "source": [ "eda_df = ticket_df.copy()\n", "eda_df[\"duration_days\"] = (eda_df[\"resolutiondate\"] - eda_df[\"created\"]).dt.total_seconds() / 86400\n", "\n", "duration_summary = eda_df[\"duration_days\"].describe()\n", "display(duration_summary)\n", "\n", "negative_duration_count = (eda_df[\"duration_days\"] < 0).sum()\n", "missing_duration_count = eda_df[\"duration_days\"].isna().sum()\n", "print(f\"Missing duration rows: {missing_duration_count:,}\")\n", "print(f\"Negative duration rows: {negative_duration_count:,}\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "43aefe1f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.00 -0.372951\n", "0.01 0.000868\n", "0.05 0.009699\n", "0.10 0.059016\n", "0.25 1.049771\n", "0.50 11.915307\n", "0.75 112.017925\n", "0.90 623.853941\n", "0.95 1199.511267\n", "0.99 2694.205712\n", "1.00 8001.517257\n", "Name: duration_days, dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eda_df[\"duration_days\"].quantile([\n", " 0.00,\n", " 0.01,\n", " 0.05,\n", " 0.10,\n", " 0.25,\n", " 0.50,\n", " 0.75,\n", " 0.90,\n", " 0.95,\n", " 0.99,\n", " 1.00,\n", "])" ] }, { "cell_type": "markdown", "id": "duration-class-distribution-heading", "metadata": {}, "source": [ "## 01-07 Duration class distribution\n", "\n", "Create simple duration classes from `duration_days` and compare how many records fall into each group. These classes are exploratory and can be adjusted during cleaning or feature engineering." ] }, { "cell_type": "code", "execution_count": 16, "id": "d20a3e76", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "duration_range\n", "Quick 319407\n", "Standard 215847\n", "Long-running 403264\n", "Name: task_count, dtype: int64" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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vHnzEkmIiIiIiIjKn5cqLI4fP45ff/0ViYmJyM7O1tm3ZcuWEkmMiIiIiIjKj2LPsQgLC0Pr1q1x7tw5bN26FTk5OTh37hz27dsHhULxKnIkIiIiIqIyrtiFxdy5c7F48WL8+eefMDY2xtKlS3H+/HkMHDgQNWvWfBU5EhERERFRGVfswuLy5cvo2bMnAEAul+PBgweQyWT45JNP8P3335d4gkREREREVPYVu7CwtLTE/fv3AQDVq1dHfHw8AODevXt4+PBhyWZHRERERETlwgsXFu+//z7u37+Ptm3bIjIyEgAwcOBAjB8/Hv7+/hgyZAg6der0yhIlIiIiIqKy64VXhfrpp58wf/58LF++HJmZmQCAKVOmwMjICFFRUejfvz8+++yzV5YoERERERGVXS9cWAghADwaClWgQoUKmDRpEiZNmlTymRERERERUblRrDkWMpnsVeVBRERERETlWLFukFe/fv3nFhd3797VKyEiIiIiIip/ilVYzJo1izfBIyIiIiKiQopVWAwePBjW1tavKhciIiIiIiqnXniOBedXEBERERHR07xwYVGwKhQREREREdGTXngoVH5+/qvMg4iIiIiIyrFiLTdLRERERERUFBYWRERERESkNxYWRERERESkNxYWRERERESkt1ItLA4dOoRevXpBpVJBJpNh27ZtOvv9/Pwgk8l0Hi1bttSJycrKwrhx42BlZQVTU1P07t0b165d04lJS0uDr68vFAoFFAoFfH19ce/ePZ2YxMRE9OrVC6amprCyskJgYCCys7N1YuLi4uDp6QkTExNUr14ds2fP5mpZREREREQo5cLiwYMHaNy4MZYvX/7UmG7duiE5OVl67Nq1S2d/UFAQtm7dirCwMERFRSE9PR3e3t7Iy8uTYnx8fKBWqxEeHo7w8HCo1Wr4+vpK+/Py8tCzZ088ePAAUVFRCAsLw++//46QkBApRqvVokuXLlCpVDh+/DiWLVuGhQsXIjQ0tARfESIiIiKi8qlYd94uad27d0f37t2fGSOXy6FUKovcp9FosGrVKqxfvx6dO3cGAGzYsAF2dnbYs2cPvLy8cP78eYSHhyMmJgYtWrQAAPzwww/w8PDAxYsX4ejoiIiICJw7dw5JSUlQqVQAgEWLFsHPzw9z5syBubk5Nm7ciMzMTKxduxZyuRwuLi74559/EBoaiuDgYN5AkIiIiIjeamV+jsWBAwdgbW2N+vXrw9/fH6mpqdK+2NhY5OTkoGvXrtI2lUoFFxcXREdHAwCOHDkChUIhFRUA0LJlSygUCp0YFxcXqagAAC8vL2RlZSE2NlaK8fT0hFwu14m5ceMGEhISXsm1ExERERGVF2W6sOjevTs2btyIffv2YdGiRTh+/Dg6duyIrKwsAEBKSgqMjY1hYWGhc5yNjQ1SUlKkGGtr60Lntra21omxsbHR2W9hYQFjY+NnxhQ8L4gpSlZWFrRarc6DiIiIiOhNU6pDoZ5n0KBB0r9dXFzg7u4Oe3t77Ny5E/3793/qcUIInaFJRQ1TKomYgonbzxoGNW/ePMyaNeup+4mIiIiI3gRlusfiSba2trC3t8elS5cAAEqlEtnZ2UhLS9OJS01NlXoTlEolbt68Wehct27d0ol5stchLS0NOTk5z4wpGJb1ZE/G46ZMmQKNRiM9kpKSinPJRERERETlQrkqLO7cuYOkpCTY2toCANzc3GBkZITIyEgpJjk5GfHx8WjVqhUAwMPDAxqNBseOHZNijh49Co1GoxMTHx+P5ORkKSYiIgJyuRxubm5SzKFDh3SWoI2IiIBKpYKDg8NTc5bL5TA3N9d5EBERERG9aUq1sEhPT4darYZarQYAXLlyBWq1GomJiUhPT8eECRNw5MgRJCQk4MCBA+jVqxesrKzQr18/AIBCocCoUaMQEhKCvXv34tSpUxg2bBgaNWokrRLl5OSEbt26wd/fHzExMYiJiYG/vz+8vb3h6OgIAOjatSucnZ3h6+uLU6dOYe/evZgwYQL8/f2lQsDHxwdyuRx+fn6Ij4/H1q1bMXfuXK4IRURERESEUp5jceLECXTo0EF6HhwcDAAYMWIEVq5cibi4OKxbtw737t2Dra0tOnTogM2bN8PMzEw6ZvHixTA0NMTAgQORkZGBTp06Ye3atTAwMJBiNm7ciMDAQGn1qN69e+vcO8PAwAA7d+5EQEAAWrduDRMTE/j4+GDhwoVSjEKhQGRkJMaMGQN3d3dYWFggODhYypmIiIiI6G0mE7x19Gul1WqhUCig0WhKZViUz7q+r71NopK2afi20k6h2PpMDSvtFIhKxPa5g0s7hWJJHOxT2ikQlYiaYZtKpd3ifHYtV3MsiIiIiIiobGJhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREeivVwuLQoUPo1asXVCoVZDIZtm3bprNfCIGZM2dCpVLBxMQE7du3x9mzZ3VisrKyMG7cOFhZWcHU1BS9e/fGtWvXdGLS0tLg6+sLhUIBhUIBX19f3Lt3TycmMTERvXr1gqmpKaysrBAYGIjs7GydmLi4OHh6esLExATVq1fH7NmzIYQosdeDiIiIiKi8KtXC4sGDB2jcuDGWL19e5P4FCxYgNDQUy5cvx/Hjx6FUKtGlSxfcv39figkKCsLWrVsRFhaGqKgopKenw9vbG3l5eVKMj48P1Go1wsPDER4eDrVaDV9fX2l/Xl4eevbsiQcPHiAqKgphYWH4/fffERISIsVotVp06dIFKpUKx48fx7Jly7Bw4UKEhoa+gleGiIiIiKh8MSzNxrt3747u3bsXuU8IgSVLlmDatGno378/AOCnn36CjY0NNm3ahA8//BAajQarVq3C+vXr0blzZwDAhg0bYGdnhz179sDLywvnz59HeHg4YmJi0KJFCwDADz/8AA8PD1y8eBGOjo6IiIjAuXPnkJSUBJVKBQBYtGgR/Pz8MGfOHJibm2Pjxo3IzMzE2rVrIZfL4eLign/++QehoaEIDg6GTCZ7Da8YEREREVHZVGbnWFy5cgUpKSno2rWrtE0ul8PT0xPR0dEAgNjYWOTk5OjEqFQquLi4SDFHjhyBQqGQigoAaNmyJRQKhU6Mi4uLVFQAgJeXF7KyshAbGyvFeHp6Qi6X68TcuHEDCQkJT72OrKwsaLVanQcRERER0ZumzBYWKSkpAAAbGxud7TY2NtK+lJQUGBsbw8LC4pkx1tbWhc5vbW2tE/NkOxYWFjA2Nn5mTMHzgpiizJs3T5rboVAoYGdn9+wLJyIiIiIqh8psYVHgySFGQojnDjt6Mqao+JKIKZi4/ax8pkyZAo1GIz2SkpKemTsRERERUXlUZgsLpVIJoHBvQGpqqtRToFQqkZ2djbS0tGfG3Lx5s9D5b926pRPzZDtpaWnIycl5ZkxqaiqAwr0qj5PL5TA3N9d5EBERERG9acpsYVGrVi0olUpERkZK27Kzs3Hw4EG0atUKAODm5gYjIyOdmOTkZMTHx0sxHh4e0Gg0OHbsmBRz9OhRaDQanZj4+HgkJydLMREREZDL5XBzc5NiDh06pLMEbUREBFQqFRwcHEr+BSAiIiIiKkdKtbBIT0+HWq2GWq0G8GjCtlqtRmJiImQyGYKCgjB37lxs3boV8fHx8PPzQ6VKleDj4wMAUCgUGDVqFEJCQrB3716cOnUKw4YNQ6NGjaRVopycnNCtWzf4+/sjJiYGMTEx8Pf3h7e3NxwdHQEAXbt2hbOzM3x9fXHq1Cns3bsXEyZMgL+/v9TD4OPjA7lcDj8/P8THx2Pr1q2YO3cuV4QiIiIiIkIpLzd74sQJdOjQQXoeHBwMABgxYgTWrl2LSZMmISMjAwEBAUhLS0OLFi0QEREBMzMz6ZjFixfD0NAQAwcOREZGBjp16oS1a9fCwMBAitm4cSMCAwOl1aN69+6tc+8MAwMD7Ny5EwEBAWjdujVMTEzg4+ODhQsXSjEKhQKRkZEYM2YM3N3dYWFhgeDgYClnIiIiIqK3mUzw1tGvlVarhUKhgEajKZX5Fj7r+r72NolK2qbh20o7hWLrMzWstFMgKhHb5w4u7RSKJXGwT2mnQFQiaoZtKpV2i/PZtczOsSAiIiIiovKDhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemNhQUREREREemtTBcWM2fOhEwm03kolUppvxACM2fOhEqlgomJCdq3b4+zZ8/qnCMrKwvjxo2DlZUVTE1N0bt3b1y7dk0nJi0tDb6+vlAoFFAo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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Basic cleaning only for visualization in this EDA notebook.\n", "# The formal cleaning steps are handled in 02-data-cleaning.ipynb.\n", "\n", "cleaned_df = ticket_df.drop_duplicates()\n", "cleaned_df = cleaned_df.dropna(subset=[\"created\", \"resolutiondate\", \"summary\"]).copy()\n", "\n", "# convert dates to datetime dtype\n", "\n", "cleaned_df[\"created\"] = pd.to_datetime(cleaned_df[\"created\"], errors=\"coerce\", utc=True)\n", "cleaned_df[\"resolutiondate\"] = pd.to_datetime(cleaned_df[\"resolutiondate\"], errors=\"coerce\", utc=True)\n", "\n", "# duration_days = resolutiondate - created\n", "\n", "cleaned_df[\"duration_days\"] = (cleaned_df[\"resolutiondate\"] - cleaned_df[\"created\"]).dt.total_seconds() / (60 * 60 * 24)\n", "cleaned_df = cleaned_df[cleaned_df[\"duration_days\"].notna() & (cleaned_df[\"duration_days\"] >= 0)]\n", "\n", "def duration_range(days):\n", " if days <= 3:\n", " return \"Quick\"\n", " if days <= 21:\n", " return \"Standard\"\n", " return \"Long-running\"\n", "\n", "duration_order = [\"Quick\", \"Standard\", \"Long-running\"]\n", "cleaned_df[\"duration_range\"] = cleaned_df[\"duration_days\"].apply(duration_range)\n", "duration_counts = cleaned_df[\"duration_range\"].value_counts().reindex(duration_order)\n", "\n", "display(duration_counts.rename(\"task_count\"))\n", "\n", "fig, ax = plt.subplots(figsize=(8, 4.5))\n", "bars = ax.bar(duration_counts.index, duration_counts.values, color=[\"#59A14F\", \"#4E79A7\", \"#E15759\"])\n", "ax.set_title(\"Task Duration Class Distribution\")\n", "ax.set_xlabel(\"Duration range\")\n", "ax.set_ylabel(\"Task count\")\n", "ax.tick_params(axis=\"x\", rotation=20)\n", "\n", "# UI logic for text above bars\n", "\n", "for bar in bars:\n", " ax.text(\n", " bar.get_x() + bar.get_width() / 2,\n", " bar.get_height(),\n", " f\"{int(bar.get_height()):,}\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " fontsize=9,\n", " )\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "beefcf7b", "metadata": {}, "source": [ "The class distribution shows whether the target is balanced or dominated by short or long tasks.\n", "\n", "The next two simple plots inspect the shortest and longest duration ranges more closely because those ranges are likely to drive cleaning decisions.\n", "\n", "##### 'Quick' label duration check" ] }, { "cell_type": "code", "execution_count": 17, "id": "3840ffe4", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtIAAAHUCAYAAAAX288qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXBRJREFUeJzt3XlcVHX////nyDIi4qgQIOWairimWIpmaiqWopWZlVekpWZpbmmWeVXmdaXmlpVlm1tutChlekXikmmuqXwL5dKrUrGCcEFUREA8vz/8MZ9GFpkDyKCP++02t5uc8z7nvM6Z4/DkPe95j8UwDEMAAAAAnFKhrAsAAAAAyiOCNAAAAGACQRoAAAAwgSANAAAAmECQBgAAAEwgSAMAAAAmEKQBAAAAEwjSAAAAgAkEaQAAAMAEgjTKxKJFi2SxWOyPihUrKjAwUJ07d9bUqVOVkpKSZ5tJkybJYrE4dZzz589r0qRJ+u6775zaLr9j1alTRxEREU7t52qWL1+uOXPm5LvOYrFo0qRJJXq8krZhwwa1bt1a3t7eslgs+vLLLwttf+zYMT377LO69dZbVbFiRVWrVk133323Pv3002LVMXDgQNWpU8fp7cw8p1feuwU9zNQDR1d7Xq/1c5F7vB9//NHpbb/77juHmjw9PXXTTTepffv2mjhxoo4ePVoiNRbHe++9p0WLFuVZfuTIEVkslnzXuYrs7Gw1atRI06ZNc1h+7tw5jR49WkFBQapYsaJuu+02RUVFFXm/K1as0F133aWAgABZrVYFBQWpV69e2rZtW5G279Spk/05r1Chgnx8fFS/fn099NBD+uKLL3Tp0iWnzrM0pKamqmrVqld9/Ub+3Mu6ANzYFi5cqEaNGik7O1spKSnaunWr3njjDc2cOVOffvqpunbtam87ePBg3XPPPU7t//z583rttdckXX5BKyozxzJj+fLlio+P1+jRo/Os2759u2655ZZSr8EswzDUr18/NWzYUKtXr5a3t7eCg4MLbP/DDz8oIiJClStX1vPPP6/mzZsrLS1Nn332mR555BH95z//sQcVZ7388ssaNWpUcU6nyHr27Knt27c7LAsLC1Pfvn01duxY+zKr1XpN6rmRlcfnYsqUKercubNycnJ08uRJ7dy5UwsWLNCbb76pjz76SP/4xz/KrLb33ntPfn5+GjhwoMPyGjVqaPv27br11lvLprAieO+995SamqoRI0Y4LO/Tp492796tadOmqWHDhlq+fLkeffRRXbp0Sf3797/qfk+ePKn27dtr1KhR8vPzU1JSkmbPnq277rpLGzZsUMeOHa+6j3r16mnZsmWSpPT0dB0+fFhffvmlHnroIXXo0EFff/21bDabuRMvAdWqVdOYMWP0/PPPq0ePHvL09CyzWsolAygDCxcuNCQZu3fvzrPu6NGjRs2aNQ0fHx8jOTm5WMc5fvy4Icl49dVXi9Q+PT29wHW1a9c2evbsWax6rtSzZ0+jdu3aJbrPa+X33383JBlvvPHGVdumpqYa/v7+Ru3atfN9TqdNm2ZIMmbPnl0apRaopJ5TScbw4cNLoKLLCrsPS1pWVpaRnZ19zY7njAEDBjj9/6Okn4u/K+x162o2bdpkSDI+//zzPOtOnjxptGzZ0nB3dzd++umnkijVuHTpknH+/HmntmnSpInRsWPHEjn+tZSdnW3cfPPNxosvvuiwfO3atYYkY/ny5Q7Lu3XrZgQFBRkXL140dbzTp08bHh4eRmRk5FXbduzY0WjSpEm+6xYsWGBIMvr162eqjpKUnJxsuLu7G8uWLSvrUsodhnbA5dSqVUuzZs3S2bNn9cEHH9iX5zfcYuPGjerUqZN8fX3l5eWlWrVq6cEHH9T58+d15MgR3XTTTZKk1157zf72Wm5vS+7+9u7dq759+6patWr2HpfChpFER0erefPmqlixourVq6e3337bYX1ur+qRI0cclue+tZs7zKRTp05au3atjh496vCWb678hnbEx8frvvvuU7Vq1exvUy5evDjf46xYsUITJ05UUFCQqlSpoq5du+rgwYMFX/i/2bp1q7p06SIfHx9VqlRJ7dq109q1a+3rJ02aZO8tf+GFF6769vnHH3+slJQUTZs2TQEBAXnWjx8/Xo0aNdLUqVN18eJFSUW/jlL+QwAuXbqkd955R7fddpu8vLxUtWpVtW3bVqtXry703N977z25u7vr1VdfLbRdYfKrUcr/LfKBAweqcuXK+vnnnxUeHi4fHx916dJF0uV74Nlnn9WSJUsUEhKiSpUqqUWLFlqzZo3Dfn/55Rc98cQTatCggSpVqqSbb75ZvXr10s8//5xvXUuWLNHYsWN18803y2q16pdffpEkLViwQC1atFDFihVVvXp1PfDAA0pISHDYR6dOnfJ9d+fK5yD3XGfOnKnZs2erbt26qly5ssLCwrRjx4482y9atEjBwcGyWq0KCQnRJ598crXLXCTHjx/XsGHD1LhxY1WuXFn+/v66++67tWXLljxt582bpxYtWqhy5cry8fFRo0aN9NJLLxW6/6SkJIWGhqpBgwb63//+Z6rG6tWr64MPPtDFixf15ptv2pcXNLQlv9en3Hvl/fffV0hIiKxWq/214bXXXlObNm1UvXp1ValSRa1atdL8+fNlGIZ9+zp16mj//v3avHlzniExBQ3tuNrrhPR//483bdqkZ555Rn5+fvL19VWfPn30559/OrQt7PW8MKtXr9Yff/yhyMhIh+XR0dGqXLmyHnroIYflTzzxhP7880/t3Lmz0P0WxMfHRxUrVpS7e/He1H/iiSfUo0cPff755w5De959913ddddd8vf3l7e3t5o1a6bp06crOzvb3uZf//qX3N3ddezYsTz7ffLJJ+Xr66sLFy5IKtp1DQgIULdu3fT+++8X65xuRARpuKQePXrIzc1N33//fYFtjhw5op49e8rT01MLFixQTEyMpk2bJm9vb2VlZalGjRqKiYmRJA0aNEjbt2/X9u3b9fLLLzvsp0+fPqpfv74+//zzq76IxMXFafTo0RozZoyio6PVrl07jRo1SjNnznT6HN977z21b99egYGB9tqufJv67w4ePKh27dpp//79evvtt7Vq1So1btxYAwcO1PTp0/O0f+mll3T06FF9/PHH+vDDD/W///1PvXr1Uk5OTqF1bd68WXfffbfS0tI0f/58rVixQj4+PurVq5d9LPPgwYO1atUqSdKIESO0fft2RUdHF7jP2NhYubm5qVevXvmut1gs6t27t44fP659+/YVWl9RDRw4UKNGjdLtt9+uTz/9VFFRUerdu3eeYJ7LMAyNGzdOo0eP1scff2wfEnQtZGVlqXfv3rr77rv11VdfORx77dq1mjt3riZPnqyVK1faA+5vv/1mb/Pnn3/K19dX06ZNU0xMjN599125u7urTZs2+f7xNGHCBCUmJur999/X119/LX9/f02dOlWDBg1SkyZNtGrVKr311lv66aefFBYWZjogSpdDQWxsrObMmaNly5YpPT1dPXr0UFpamr3NokWL9MQTTygkJEQrV67UP//5T/3rX//Sxo0bTR8316lTpyRJr776qtauXauFCxeqXr166tSpk8MfOlFRURo2bJg6duyo6OhoffnllxozZozS09ML3Hd8fLzatGkjq9Wq7du3q0GDBqbrvP3221WjRo1CX/Ou5ssvv9S8efP0yiuv6Ntvv1WHDh0kXX6tHDp0qD777DOtWrVKffr00YgRI/Svf/3Lvm10dLTq1aunli1b2l+LCvs/XZTXib8bPHiwPDw8tHz5ck2fPl3fffedHnvsMfv6q72eF2bt2rXy9/dX48aNHZbHx8crJCQkT+Bt3ry5fX1R5eTkKDs7W0eOHNEzzzwjwzA0fPjwIm9fkN69e8swDIc/7H799Vf1799fS5Ys0Zo1azRo0CDNmDFDQ4cOtbcZOnSo3N3dHTqbpMv3e1RUlAYNGqSKFSs6dV07deqkH374QadPny72ed1QyrZDHDeqorxFGhAQYISEhNh/fvXVV42/37JffPGFIcmIi4srcB+FDe3I3d8rr7xS4Lq/q127tmGxWPIcr1u3bkaVKlXsb8fnntvhw4cd2uW+tbtp0yb7ssKGdlxZ9yOPPGJYrVYjMTHRod29995rVKpUyTh9+rTDcXr06OHQ7rPPPjMkGdu3b8/3eLnatm1r+Pv7G2fPnrUvu3jxotG0aVPjlltuMS5dumQYhmEcPnzYkGTMmDGj0P0ZhmE0atTICAwMLLTNvHnzHN76duY6XjkE4PvvvzckGRMnTiz0mLlDO86fP288+OCDhs1mM9avX3/V87mSrhhOkF+NhvF/12zhwoUOtUsyFixYkO9+AwICjDNnztiXJScnGxUqVDCmTp1aYD0XL140srKyjAYNGhhjxozJU9ddd93l0D41NdXw8vLKc88kJiYaVqvV6N+/v31Zx44d8337/8rnIPdcmzVr5vAW+q5duwxJxooVKwzDMIycnBwjKCjIaNWqlf3eMgzDOHLkiOHh4VHiQzsuXrxoZGdnG126dDEeeOAB+/Jnn33WqFq1aqH7/vvrVmxsrFGlShWjb9++RkZGxlXrKmxoR642bdoYXl5e9p8LGtqS3+uTJMNmsxmnTp0qtI6cnBwjOzvbmDx5suHr6+twzQsa2pHffVvU14ncazZs2DCHfU6fPt2QZCQlJRmGUbTX84KEhIQY99xzT57lDRo0MLp3755n+Z9//mlIMqZMmVLkYwQHBxuSDElGjRo1jK1btxZpu8KGdhiGYXzzzTeFDpHLfb4++eQTw83NzeH5HTBggOHv729kZmbal73xxhtGhQoV7K+bzlzX2NhYQ5LxzTffFOnccBk90nBZxt/edszPbbfdJk9PTz311FNavHixQw+dMx588MEit23SpIlatGjhsKx///46c+aM9u7da+r4RbVx40Z16dJFNWvWdFg+cOBAnT9/Pk9vdu/evR1+zu2FKWx2gPT0dO3cuVN9+/ZV5cqV7cvd3NwUGRmp33//vcjDQ5yV+3yb+bDhlb755htJKlKP0cmTJ3X33Xdr165d9reqy0JB92Hnzp3l4+Nj/zkgIED+/v4Oz+PFixc1ZcoUNW7cWJ6ennJ3d5enp6f+97//5Rmakd+xtm/froyMjDwfMqtZs6buvvtubdiwwfR59ezZU25ubvafr7wPDx48qD///FP9+/d3eO5r166tdu3amT7u373//vtq1aqV/e14Dw8PbdiwweHa3HHHHTp9+rQeffRRffXVVzpx4kSB+1u8eLF69OihwYMH67PPPlPFihVLpM6rveZdzd13361q1arlWb5x40Z17dpVNptNbm5u8vDw0CuvvKKTJ0/mO0PS1Zh5nbja61FxXs///PNP+fv757uusNeT3HWXLl3SxYsX7Y/83rVbuXKldu7cqc8//1yNGzfWvffe6/RsUPnJ7znft2+fevfuLV9fX/vz9fjjjysnJ0eHDh2ytxs1apRSUlL0+eef289j3rx56tmzp31YjjPXNfca/vHHH8U+rxsJQRouKT09XSdPnlRQUFCBbW699VatX79e/v7+Gj58uG699Vbdeuuteuutt5w6Vo0aNYrcNjAwsMBlJ0+edOq4zjp58mS+teZeoyuP7+vr6/Bz7swFGRkZBR4jNTVVhmE4dZyiqFWrlo4fP17o2+S5Qy6u/EPBjOPHj8vNzS3f5+tKhw4d0s6dO3XvvfeqadOmxT62GZUqVVKVKlXyXXfl8yhdfi7//jw+99xzevnll3X//ffr66+/1s6dO7V79261aNEi3+f7yuc39zkt6Hkvzr19tfswd9+F/d8qjtmzZ+uZZ55RmzZttHLlSu3YsUO7d+/WPffc43BtIiMjtWDBAh09elQPPvig/P391aZNG8XGxubZZ1RUlLy8vDR48OAS+cMvV2JiYqGveVeT3/O3a9cuhYeHS5I++ugj/fDDD9q9e7cmTpwoqfDXg4KYeZ242n1QnNfzjIyMfP+Y8fX1zffezR3uU716dUnS5MmT5eHhYX/kNztJkyZNdMcdd6hv376KiYlR7dq1S2SmoNw/JHKvW2Jiojp06KA//vhDb731lrZs2aLdu3fr3XfftZ9rrpYtW6pDhw72dWvWrNGRI0f07LPP2ts4c11zr6GZe+JGRpCGS1q7dq1ycnKuOmVd7tRBaWlp2rFjh8LCwjR69Gin5gl15hdhcnJygctyf1HkvhhlZmY6tCush6sofH19lZSUlGd57gd2/Pz8irV/6fI0SBUqVCjx44SHhysnJ0dff/11vusNw9Dq1avl6+tr7/EvznW86aablJOTk+/zdaWwsDAtXLhQ8+fP19ChQ0tkXldnay9uGFu6dKkef/xxTZkyRd27d9cdd9yh1q1bF/l4ufduQc/735/zihUr5jkvyfz9nXvswv5vFcfSpUvVqVMne09dmzZt1Lp1a509ezZP2yeeeELbtm1TWlqa1q5dK8MwFBERkeddnGXLlqlRo0bq2LGj4uLiil2jdDnwJicnO7zmOXut87uPoqKi5OHhoTVr1qhfv35q166dWrduXaxaS+t1wuzruZ+fnz0c/12zZs2UkJBg/wBzrtwP4eb+4fzUU09p9+7d9kdBr1O53N3d1apVK4feYbNWr14ti8Wiu+66S9Llce7p6elatWqVHnvsMd15551q3bp1gVPSjRw5Utu3b9fevXs1d+5cNWzYUN26dXNoU9TrmnsNS+J3yY2EIA2Xk5iYqHHjxslmszl8uKIwbm5uatOmjf0v89xhFkXphXXG/v379f/+3/9zWLZ8+XL5+PioVatWkmR/S+2nn35yaJffbBFX9iwWpkuXLtq4cWOeT7p/8sknqlSpktq2bVvU0yiQt7e32rRpo1WrVjnUdenSJS1dulS33HKLGjZs6PR+Bw0apICAAE2YMCHft5KnT5+u//73v3r66aftz5kz1/FK9957r6TLszAUxYABAxQVFaWFCxfa30ItjuLUbobFYskzV/LatWuL/BZtWFiYvLy8tHTpUoflv//+u31IUa46dero0KFDDgHv5MmTRf6CiisFBwerRo0aWrFihcPb3EePHjW9z7/L79r89NNPhX6w19vbW/fee68mTpyorKws7d+/32F99erVtX79eoWEhKhz5875zkLijFOnTunpp5+Wh4eHxowZY19ep04dpaSk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f3/NnDmz1K8DAAAAXI/FKKuvLLxBnTlzRjabTWlpadekJ3vv3r0KDQ1V4IA5sgbWd2rbzORflLx4tPbs2aNWrVqVUoUAAACupah5zdQXsvz666+aM2eOEhISZLFYFBISolGjRunWW281XTAAAABQnjg9j/S3336rxo0ba9euXWrevLmaNm2qnTt3qkmTJoqNjS2NGgEAAACX43SP9IsvvqgxY8Zo2rRpeZa/8MIL6tatW4kVBwAAALgqp3ukExISNGjQoDzLn3zySR04cKBEigIAAABcndNB+qabblJcXFye5XFxcddkJg8AAADAFTg9tGPIkCF66qmn9Ntvv6ldu3ayWCzaunWr3njjDY0dO7Y0agQAAABcjtNB+uWXX5aPj49mzZqlCRMmSJKCgoI0adIkjRw5ssQLBAAAAFyR00HaYrFozJgxGjNmjM6ePStJDl9+AgAAANwITM0jnYsADQAAgBuV0x82BAAAAECQBgAAAEwhSAMAAAAmOBWks7Oz1blzZx06dKi06gEAAADKBaeCtIeHh+Lj42WxWEqrHgAAAKBccHpox+OPP6758+eXRi0AAABAueH09HdZWVn6+OOPFRsbq9atW8vb29th/ezZs0usOAAAAMBVOR2k4+Pj1apVK0nKM1aaIR8AAAC4UTgdpDdt2lQadQAAAADliunp73755Rd9++23ysjIkCQZhlFiRQEAAACuzukgffLkSXXp0kUNGzZUjx49lJSUJEkaPHiwxo4dW+IFAgAAAK7I6SA9ZswYeXh4KDExUZUqVbIvf/jhhxUTE1OixQEAAACuyukx0uvWrdO3336rW265xWF5gwYNdPTo0RIrDAAAAHBlTvdIp6enO/RE5zpx4oSsVmuJFAUAAAC4OqeD9F133aVPPvnE/rPFYtGlS5c0Y8YMde7cuUSLAwAAAFyV00M7ZsyYoU6dOunHH39UVlaWxo8fr/379+vUqVP64YcfSqNGAAAAwOU43SPduHFj/fTTT7rjjjvUrVs3paenq0+fPtq3b59uvfXW0qgRAAAAcDlO90hLUmBgoF577bWSrgUAAAAoN0wF6dTUVM2fP18JCQmyWCwKCQnRE088oerVq5d0fQAAAIBLcnpox+bNm1W3bl29/fbbSk1N1alTp/T222+rbt262rx5c2nUCAAAALgcp3ukhw8frn79+mnevHlyc3OT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1mF5bGys2rVrV0ZVAQAAoCzQI+2k5557TpGRkWrdurXCwsL04YcfKjExUU8//XRZlwYAAIBriCDtpIcfflgnT57U5MmTlZSUpKZNm+o///mPateuXdal5ctqterVV1/NM7wEpYvrXja47mWD637tcc3LBte9bLjydbcYxtXm9QAAAABwJcZIAwAAACYQpAEAAAATCNIAAACACQRpAAAAwASC9HXgvffeU926dVWxYkWFhoZqy5YthbbfvHmzQkNDVbFiRdWrV0/vv//+Nar0+uHMNf/uu+9ksVjyPP773/9ew4rLv++//169evVSUFCQLBaLvvzyy6tuw71efM5ed+734ps6dapuv/12+fj4yN/fX/fff78OHjx41e2434vHzHXnfi++efPmqXnz5vYvWwkLC9M333xT6DaudK8TpMu5Tz/9VKNHj9bEiRO1b98+dejQQffee68SExPzbX/48GH16NFDHTp00L59+/TSSy9p5MiRWrly5TWuvPxy9prnOnjwoJKSkuyPBg0aXKOKrw/p6elq0aKF5s6dW6T23Oslw9nrnov73bzNmzdr+PDh2rFjh2JjY3Xx4kWFh4crPT29wG2434vPzHXPxf1u3i233KJp06bpxx9/1I8//qi7775b9913n/bv359ve5e71w2Ua3fccYfx9NNPOyxr1KiR8eKLL+bbfvz48UajRo0clg0dOtRo27ZtqdV4vXH2mm/atMmQZKSmpl6D6m4Mkozo6OhC23Cvl7yiXHfu95KXkpJiSDI2b95cYBvu95JXlOvO/V46qlWrZnz88cf5rnO1e50e6XIsKytLe/bsUXh4uMPy8PBwbdu2Ld9ttm/fnqd99+7d9eOPPyo7O7vUar1emLnmuVq2bKkaNWqoS5cu2rRpU2mWCXGvlzXu95KTlpYmSapevXqBbbjfS15Rrnsu7veSkZOTo6ioKKWnpyssLCzfNq52rxOky7ETJ04oJydHAQEBDssDAgKUnJyc7zbJycn5tr948aJOnDhRarVeL8xc8xo1aujDDz/UypUrtWrVKgUHB6tLly76/vvvr0XJNyzu9bLB/V6yDMPQc889pzvvvFNNmzYtsB33e8kq6nXnfi8ZP//8sypXriyr1aqnn35a0dHRaty4cb5tXe1e5yvCrwMWi8XhZ8Mw8iy7Wvv8lqNgzlzz4OBgBQcH238OCwvT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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "quick_df = cleaned_df[(cleaned_df[\"duration_days\"] >= 0) & (cleaned_df[\"duration_days\"] <= 3)]\n", "\n", "# each rectangle represents 2 hrs\n", "\n", "plt.figure(figsize=(8, 5))\n", "plt.hist(quick_df[\"duration_days\"], bins=36, edgecolor=\"black\")\n", "plt.title(\"Distribution of Quick Turnaround Task Durations (0-3 Days)\")\n", "plt.xlabel(\"Duration (Days)\")\n", "plt.ylabel(\"Number of Tasks\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "51a7a82a", "metadata": {}, "source": [ "The shortest tasks appear concentrated near the beginning of the range. The cleaning notebook should decide whether very short tasks are valid work items or need a separate class.\n", "\n", "##### 'Long-range' label duration check" ] }, { "cell_type": "code", "execution_count": 18, "id": "9d3bba34", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApIAAAHUCAYAAACJYciKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPFNJREFUeJzt3XmcT3X///HnZ/YZs2AYY50Zk31fyiDZCmPGpaRyhUiLFCFbm5RLl8pVKlckhUql6wpdRboiSwqRJbtc1sIg2YcZM/P+/eH7Ob/5zMLMGzMxj/vtdm71Oef9Oed1XnNm5ul8zjnjMsYYAQAAAPnkVdgFAAAA4NpEkAQAAIAVgiQAAACsECQBAABghSAJAAAAKwRJAAAAWCFIAgAAwApBEgAAAFYIkgAAALBCkMQ1Z/r06XK5XPrpp58Ku5Qibc+ePXK5XHma9uzZc8W2949//MPq/Znr8fb2VokSJVSvXj317dtXK1euvOz6LtdXX32l559/Psdl0dHR6t27d4HWk9nWrVvVu3dvVapUSX5+fipVqpQ6duyo+fPnX9Z6J06cqOnTp2eb7/5aZ17m/r6/EsdSXu3atUv9+/dX1apVFRgYqKCgINWqVUvPPvus9u/f74xr1aqVateuXWB1uUVHRysxMbHAtwtk5lPYBQC4NpUtW1YrVqzwmPfoo4/qxIkT+uijj7KN/TPo2rWrhgwZImOMTp48qU2bNumDDz7QO++8o8cff1xvvPFGodX21Vdf6a233soxTM6ZM0ehoaEFX5Sk2bNn695771XlypU1cuRIVatWTYcOHdK0adPUsWNHDRs2TK+88orVuidOnKhSpUrlKSQnJCRoxYoVBXYszZ07V926dVOpUqXUv39/NWjQQC6XSxs3btTUqVM1b948rVu3rkBqAf7MCJJAITp//rxcLpd8fK69b0V/f3/FxcV5zAsNDVVqamq2+X8WZcqU8aitffv2GjRokB5++GG9+eabql69uvr163dFtpWcnKygoKArsq4GDRpckfXk186dO9WzZ0/VqVNHS5YsUbFixZxld911l/r166dx48apYcOG6tat21WtpXTp0ipduvQVW9/Fvj67d+9Wt27dVLVqVS1evFhhYWHOsjZt2ujxxx/XnDlzrlgtwLWMj7Zx3fr+++/Vtm1bhYSEKCgoSM2aNdO8efM8xrg/Llu8eLH69eunUqVKKTw8XF26dNGBAwc8xqakpGjIkCGKjIxUUFCQbrnlFq1ZsybPHzsuWbJELpdLH374oYYMGaLy5cvL399f//vf/3TkyBE9+uijqlmzpoKDgxUREaE2bdpo2bJlHuvI/PHua6+9ppiYGAUHB6tp06Y5fjw7ZcoUVa1aVf7+/qpZs6Y+/vhj9e7dW9HR0R7jUlNTNWbMGFWvXl3+/v4qXbq07r//fh05ciRvzb6IF154QU2aNFHJkiUVGhqqhg0b6r333pMxxmPcokWL1KpVK4WHhyswMFCVKlXSnXfeqeTk5FzXff78efXq1UvBwcGaO3euVX3e3t765z//qVKlSmncuHHO/Nw+SnV/HZcsWeLMc3+0+d1336lZs2YKCgpSnz59JEmffvqp2rVrp7JlyyowMFA1atTQk08+qTNnzjjv7927t9566y1JyvGSgJyOsX379qlHjx6KiIiQv7+/atSooVdffVUZGRnOmPweL1mNHz9eycnJmjBhgkeIdHv11VdVvHhxvfjii868559/Xi6XK9vYrP2Mjo7W5s2btXTpUmd/sx6XF3u/28KFC9W2bVuFhoYqKChIzZs317fffusxxl3T2rVr1bVrV5UoUUKxsbG5buu1117TmTNnNHHiRI8Q6eZyudSlS5ds81evXq0WLVooKChIlStX1ksvveTx9ZCkkydPaujQoYqJiZGfn5/Kly+vQYMGeRwPkpSRkaEJEyaofv36CgwMVPHixRUXF6cvvvgi17qlC2d5fXx8NGrUqIuOA66Ua+80CJAHS5cu1W233aa6devqvffek7+/vyZOnKhOnTrpk08+0T333OMx/sEHH1RCQoI+/vhj/frrrxo2bJh69OihRYsWOWPuv/9+ffrppxo+fLjatGmjLVu26I477tDJkyfzVdtTTz2lpk2b6u2335aXl5ciIiKcwDZq1ChFRkbq9OnTmjNnjlq1aqVvv/1WrVq18ljHW2+9perVq+v111+XJI0cOVIdO3bU7t27nV9877zzjvr27as777xT48eP14kTJ/TCCy8oJSXFY10ZGRnq3Lmzli1bpuHDh6tZs2bau3evRo0apVatWumnn35SYGBgvvYxsz179qhv376qVKmSJGnlypUaMGCA9u/fr+eee84Zk5CQoBYtWmjq1KkqXry49u/fr6+//lqpqak5njk6fvy4unTpoq1bt2rp0qVq1KiRdY2BgYG69dZbNXPmTP3222+qUKFCvtdx8OBB9ejRQ8OHD9ff//53eXld+Hf6jh071LFjRw0aNEjFihXTtm3b9PLLL2vVqlXO8TVy5EidOXNGn332mcflArl9jHvkyBE1a9ZMqamp+tvf/qbo6GjNnTtXQ4cO1c6dOzVx4kSP8Xk5XnKyYMGCbGdxMwsKClK7du30r3/9S0lJSYqMjMxzv+bMmaOuXbsqLCzMqdff3z/P75ekGTNm6L777lPnzp31/vvvy9fXV5MnT1b79u313//+V23btvUY36VLF3Xr1k2PPPJItuCW2TfffHPR/c5JUlKSunfvriFDhmjUqFGaM2eOnnrqKZUrV0733XefpAtnQVu2bKnffvtNTz/9tOrWravNmzfrueee08aNG7Vw4UInhPfu3VszZszQAw88oNGjR8vPz09r167N9RpRY4yGDRumN998U++++26hXlOLIsYA15hp06YZSWb16tW5jomLizMRERHm1KlTzry0tDRTu3ZtU6FCBZORkeGxrkcffdTj/a+88oqRZA4ePGiMMWbz5s1GkhkxYoTHuE8++cRIMr169bpk3YsXLzaSzC233HLJsWlpaeb8+fOmbdu25o477nDm796920gyderUMWlpac78VatWGUnmk08+McYYk56ebiIjI02TJk081rt3717j6+troqKisu3DrFmzPMauXr3aSDITJ068ZL1uLVu2NLVq1cp1eXp6ujl//rwZPXq0CQ8Pd74On332mZFk1q9fn+t73fs+btw4s3v3blOzZk1Ts2ZNs2fPnjzVJsk89thjuS4fMWKEkWR+/PFHY8z/PzZ2797tMc79dVy8eLEzr2XLlkaS+fbbby9aQ0ZGhjl//rxZunSpkWR+/vlnZ9ljjz1mcvuRHBUV5XGMPfnkkx61uvXr18+4XC6zfft2Y0zej5fcBAQEmLi4uIuOydq3UaNG5bgfOfWzVq1apmXLltnGuuueNm1aru8/c+aMKVmypOnUqZPHe9PT0029evXMTTfd5Mxz1/Tcc89ddF/c8rLfmbm//lm/HjVr1jTt27d3Xo8dO9Z4eXll+9nlPv6/+uorY4wx3333nZFknnnmmYtuNyoqyiQkJJjk5GRz5513mrCwMLNw4cI81w1cCXy0jevOmTNn9OOPP6pr164KDg525nt7e6tn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sEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArBEkAAABYIUgCAADACkESAAAAVgiSAAAAsEKQBAAAgBWCJAAAAKwQJAEAAGCFIAkAAAArPgW9QWOMJOnkyZMFvWkAAADkgTunuXNbbgo8SJ46dUqSVLFixYLeNAAAAPLh1KlTCgsLy3W5y1wqal5hGRkZOnDggEJCQuRyua7adk6ePKmKFSvq119/VWho6FXbzrWI3uSO3uSMvuSO3uSMvuSO3uSO3uSsMPpijNGpU6dUrlw5eXnlfiVkgZ+R9PLyUoUKFQpse6GhoRyMuaA3uaM3OaMvuaM3OaMvuaM3uaM3OSvovlzsTKQbN9sAAADACkESAAAAVq7bIOnv769Ro0bJ39+/sEv506E3uaM3OaMvuaM3OaMvuaM3uaM3Ofsz96XAb7YBAADA9eG6PSMJAACAq4sgCQAAACsESQAAAFghSAIAAMDKdRskJ06cqJiYGAUEBKhRo0ZatmxZYZd0RX333Xfq1KmTypUrJ5fLpc8//9xjuTFGzz//vMqVK6fAwEC1atVKmzdv9hiTkpKiAQMGqFSpUipWrJj+8pe/6LfffvMYc+zYMfXs2VNhYWEKCwtTz549dfz48au8d/bGjh2rG2+8USEhIYqIiNDtt9+u7du3e4wpir2ZNGmS6tat6zzMtmnTppo/f76zvCj2JDdjx46Vy+XSoEGDnHlFtT/PP/+8XC6XxxQZGeksL6p9kaT9+/erR48eCg8PV1BQkOrXr681a9Y4y4tqb6Kjo7MdMy6XS4899pikotsXSUpLS9Ozzz6rmJgYBQYGqnLlyho9erQyMjKcMddkf8x1aObMmcbX19dMmTLFbNmyxQwcONAUK1bM7N27t7BLu2K++uor88wzz5hZs2YZSWbOnDkey1966SUTEhJiZs2aZTZu3GjuueceU7ZsWXPy5ElnzCOPPGLKly9vFixYYNauXWtat25t6tWrZ9LS0pwxHTp0MLVr1zbLly83y5cvN7Vr1zaJiYkFtZv51r59ezNt2jSzadMms379epOQkGAqVapkTp8+7Ywpir354osvzLx588z27dvN9u3bzdNPP218fX3Npk2bjDFFsyc5WbVqlYmOjjZ169Y1AwcOdOYX1f6MGjXK1KpVyxw8eNCZDh8+7Cwvqn35448/TFRUlOndu7f58ccfze7du83ChQvN//73P2dMUe3N4cOHPY6XBQsWGElm8eLFxpii2xdjjBkzZowJDw83c+fONbt37zb//ve/TXBwsHn99dedMddif67LIHnTTTeZRx55xGNe9erVzZNPPllIFV1dWYNkRkaGiYyMNC+99JIz79y5cyYsLMy8/fbbxhhjjh8/bnx9fc3MmTOdMfv37zdeXl7m66+/NsYYs2XLFiPJrFy50hmzYsUKI8ls27btKu/VlXH48GEjySxdutQYQ28yK1GihHn33Xfpyf85deqUqVKlilmwYIFp2bKlEySLcn9GjRpl6tWrl+OyotyXESNGmJtvvjnX5UW5N1kNHDjQxMbGmoyMjCLfl4SEBNOnTx+PeV26dDE9evQwxly7x81199F2amqq1qxZo3bt2nnMb9eunZYvX15IVRWs3bt3KykpyaMH/v7+atmypdODNWvW6Pz58x5jypUrp9q1aztjVqxYobCwMDVp0sQZExcXp7CwsGumlydOnJAklSxZUhK9kaT09HTNnDlTZ86cUdOmTenJ/3nssceUkJCgW2+91WN+Ue/Pjh07VK5cOcXExKhbt27atWuXpKLdly+++EKNGzfWXXfdpYiICDVo0EBTpkxxlhfl3mSWmpqqGTNmqE+fPnK5XEW+LzfffLO+/fZb/fLLL5Kkn3/+Wd9//706duwo6do9bnyu+BoL2e+//6709HSVKVPGY36ZMmWUlJRUSFUVLPd+5tSDvXv3OmP8/PxUokSJbGPc709KSlJERES29UdERFwTvTTG6IknntDNN9+s2rVrSyravdm4caOaNm2qc+fOKTg4WHPmzFHNmjWdHyxFsSduM2fO1Nq1a7V69epsy4ryMdOkSRN98MEHqlq1qg4dOqQxY8aoWbNm2rx5c5Huy65duzRp0iQ98cQTevrpp7Vq1So9/vjj8vf313333Veke5PZ559/ruPHj6t3796Sivb3kiSNGDFCJ06cUPXq1eXt7a309HS9+OKL+utf/yrp2u3PdRck3Vwul8drY0y2edc7mx5kHZPT+Gull/3799eGDRv0/fffZ1tWFHtTrVo1rV+/XsePH9esWbPUq1cvLV261FleFHsiSb/++qsGDhyob775RgEBAbmOK4r9iY+Pd/6/Tp06atq0qWJjY/X+++8rLi5OUtHsS0ZGhho3bqy///3vkqQGDRpo8+bNmjRpku677z5nXFHsTWbvvfee4uPjVa5cOY/5RbUvn376qWbMmKGPP/5YtWrV0vr16zVo0CCVK1dOvXr1csZda/257j7aLlWqlLy9vbOl7sOHD2dL+dcr912V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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "long_range_duration = cleaned_df.loc[\n", " cleaned_df[\"duration_days\"] > 21,\n", " \"duration_days\",\n", "].dropna()\n", "\n", "plt.figure(figsize=(8, 5))\n", "plt.boxplot(long_range_duration, vert=False)\n", "plt.title(\"Long-range Task Duration Outlier Check\")\n", "plt.xlabel(\"Duration in Days\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b529b7d9", "metadata": {}, "source": [ "The long-range boxplot shows that some tickets remain open much longer than the typical long-range task. These values should be reviewed in cleaning before model training." ] }, { "cell_type": "markdown", "id": "c733b8d5", "metadata": {}, "source": [ "##### Class percentages" ] }, { "cell_type": "code", "execution_count": 19, "id": "94cd0e06", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "duration_range\n", "Quick 34.03\n", "Standard 23.00\n", "Long-running 42.97\n", "Name: proportion, dtype: float64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class_percentages = (cleaned_df[\"duration_range\"].value_counts(normalize=True).reindex(duration_order).mul(100).round(2))\n", "class_percentages" ] }, { "cell_type": "markdown", "id": "text-feature-exploration-heading", "metadata": {}, "source": [ "## 01-08 Text feature exploration\n", "\n", "Text fields are useful because task summaries and descriptions often contain signals about complexity. This section keeps the checks basic by looking at missing values, blank strings, and character lengths." ] }, { "cell_type": "code", "execution_count": 20, "id": "text-feature-exploration-code", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
featuremissing_countblank_countaverage_charactersmedian_charactersmax_characters
0summary0057.12208554.0255
1description92479925761049.391875325.08577458
\n", "
" ], "text/plain": [ " feature missing_count blank_count average_characters \\\n", "0 summary 0 0 57.122085 \n", "1 description 92479 92576 1049.391875 \n", "\n", " median_characters max_characters \n", "0 54.0 255 \n", "1 325.0 8577458 " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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7jSEWOAO9PeAlBtw4uPjjTHGPPDAA9Z/8K4OsR9++KGRZD799FOb/e3atctIMu+8844xxpgDBw4YSWbkyJE2/ZYvX24kXTfEXu3KlSsmLS3NeHp6mjfffDPPeQwZMsSm//Tp040kk5CQUOhrcnWInTZtmilVqlSeEPnJJ58YSWbNmjXWtkOHDhkfHx/TtWtXs2HDBlOqVCnz4osv2mz38ccfX/c8/64wIbZ9+/bmrrvuMsnJyTbtw4YNM25ubub8+fPGmP93jTt27GjT76OPPjKSzI4dO4wxxpw/f964urqaHj162PTbsWOHkWTzu5D7M1+4cGGeuvr27WskmY8++simvWPHjqZGjRrXPfeQkBBjsVjM3r17bdrbtm1rfHx8zMWLF40xxhw5csSUKlXKzJw509onPT3dlC9f3vTv3/+6x5GU7/L+++8bYwp/fa925coVk5WVZQYOHGjuu+8+m3Wenp42v/+57A2xpUuXNgcPHrTpO2jQIOPl5WV+//13m/bXX3/dSLIGZuCfgukEwB2uefPmuvvuu7VgwQLt27dPu3btKnAqwerVq1WmTBk9+uijunLlinWpV6+eAgICrFMCNm/eLEl6+umnbbbv3r27nJyuP9U+LS1Nzz//vKpWrSonJyc5OTnJy8tLFy9e1IEDB/L079y5s837unXrSlKe6Qf2WL16terUqaN69erZnGv79u3zTH+oWrWq3n//fX3++efq1KmTmjZtmudP60Xt8uXL2rhxox577DF5eHjY1NixY0ddvnxZO3futNnmetdp586dysjIUPfu3W36NWzY0O6b0SwWix599NE8xyvsz6R27dq69957bdp69uyplJQU/fDDD5KkKlWqqFOnTnrnnXdkjJEkrVixQufOndOwYcMKdZzu3btr165dNkvXrl3tvr4ff/yxHnroIXl5ecnJyUnOzs6aP39+vr+vRaFu3bqqXr26Tdvq1avVsmVLBQUF2dTboUMHSX/dsAn8k3BjF3CHs1gs6t+/v9566y1dvnxZ1atXV9OmTfPte+rUKV24cEEuLi75rj979qwk6dy5c5KkgIAAm/VOTk4qX778dWvq2bOnNm7cqAkTJuiBBx6Qj4+PLBaLOnbsqPT09Dz9r96nq6urJOXbt7BOnTqlw4cPF3ineu655nrkkUfk7++vU6dOadSoUSpduvQNH7swzp07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W7dueda5ublZX2/btk2lS5fWsWPHdOXKFTk53fxHcE5OjurXr6/ly5fnWZc7wtqvXz+dOXNGs2bNUkhIiFxdXdWoUSPrdIOClCpVSsYYm7asrKw8/Tw9PfPU9Oijj+rVV1/N0zcwMPC65wQAhUGIBYCbdP/99+vgwYOqWrVqgX1Wrlypzz77TFu2bFGPHj308ssva/Lkydb1zs7Oys7OvqFjr1y5UhUrVpSPj0++fb7++mu988476tixoyTpxIkTeW6yyu/4FSpUUHx8vE3b3r175ezsfN2aPv30U4WGhhZJUAeA/HBjFwDcpIkTJ2rJkiWKjo7W/v37deDAAa1cuVIvvviiJOnkyZN69tln9eqrr6pJkyZatGiRpk2bpp07d1r3ERoaqo0bNyoxMVFJSUmFPvbTTz8tPz8/denSRV9//bWOHj2qrVu36rnnntPJkycl/TVndenSpTpw4IC+++47Pf3003keCZbf8Vu1aqXdu3dryZIlOnTokCZNmpQn1OZn6NChOn/+vJ566il9//33+t///qf169drwIABNxTUASA/hFgAuEnt27fX6tWrFRcXpwceeEANGzbUjBkzFBISImOM+vXrpwcffFDDhg2TJLVt21bDhg1Tr169lJaWJkl64403FBcXp+DgYN13332FPraHh4e2bdumypUrq1u3bqpZs6YGDBig9PR068jsggULlJSUpPvuu0+9e/fWiBEjVLFiRZv95Hf89u3ba8KECRo7dqweeOABpaamqk+fPtetKSgoSN98842ys7PVvn171alTR88995x8fX1VqhT/7AAoGhZz9YQnAAAA4DbH/xIDAADA4RBiAQAA4HAIsQAAAHA4hFgAAAA4HEIsAAAAHA4hFgAAAA6HEAsAAACHQ4gFAACAwyHEAgAAwOEQYgEAAOBwCLEAAABwOIRYAAAAOJz/D68oMNgdfZw+AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "text_columns = [\"summary\", \"description\"]\n", "text_summary = []\n", "\n", "for column in text_columns:\n", " # extract non-empty feature attributes\n", "\n", " text_values = cleaned_df[column].astype(\"string\")\n", " text_lengths = text_values.fillna(\"\").str.len()\n", " blank_count = text_values.fillna(\"\").str.strip().eq(\"\").sum()\n", "\n", " text_summary.append({\n", " \"feature\": column,\n", " \"missing_count\": text_values.isna().sum(),\n", " \"blank_count\": blank_count,\n", " \"average_characters\": text_lengths.mean(),\n", " \"median_characters\": text_lengths.median(),\n", " \"max_characters\": text_lengths.max(),\n", " })\n", "\n", "text_summary_df = pd.DataFrame(text_summary)\n", "display(text_summary_df)\n", "\n", "fig, ax = plt.subplots(figsize=(7, 4))\n", "ax.bar(text_summary_df[\"feature\"], text_summary_df[\"median_characters\"], color=\"#4E79A7\")\n", "ax.set_title(\"Median Text Length by Feature\")\n", "ax.set_xlabel(\"Text feature\")\n", "ax.set_ylabel(\"Median character count\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "categorical-feature-exploration-heading", "metadata": {}, "source": [ "## 01-09 Categorical feature exploration\n", "\n", "Categorical fields help describe the type and priority of each task. The checks below look at unique value counts and the most frequent values so cleaning can decide whether rare categories should be grouped." ] }, { "cell_type": "code", "execution_count": 21, "id": "categorical-feature-exploration-code", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
featuremissing_countunique_count
0priority.name1184615
1issuetype.name037
\n", "
" ], "text/plain": [ " feature missing_count unique_count\n", "0 priority.name 11846 15\n", "1 issuetype.name 0 37" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Top values for priority.name\n" ] }, { "data": { "text/plain": [ "priority.name\n", "Major 614994\n", "Minor 177625\n", "Critical 43868\n", "Blocker 34508\n", "Trivial 26931\n", "NaN 11846\n", "Normal 11188\n", "P2 6388\n", "Low 6160\n", "P3 2629\n", "Name: count, dtype: int64" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Top values for issuetype.name\n" ] }, { "data": { "text/plain": [ "issuetype.name\n", "Bug 479382\n", "Improvement 224438\n", "Sub-task 87658\n", "Task 63720\n", "New Feature 51239\n", "Test 10239\n", "Dependency upgrade 7167\n", "Wish 5221\n", "Documentation 2011\n", "Question 2005\n", "Name: count, dtype: int64" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "categorical_columns = [\"priority.name\", \"issuetype.name\"]\n", "\n", "missing_count = []\n", "unique_count = []\n", "\n", "for cat in categorical_columns:\n", " missing_count.append(cleaned_df[cat].isna().sum())\n", " unique_count.append(cleaned_df[cat].nunique(dropna=True))\n", "\n", "categorical_summary = pd.DataFrame({\n", " \"feature\": categorical_columns,\n", " \"missing_count\": missing_count,\n", " \"unique_count\": unique_count,\n", "})\n", "\n", "display(categorical_summary)\n", "\n", "for column in categorical_columns:\n", " print(f\"Top values for {column}\")\n", " display(cleaned_df[column].value_counts(dropna=False).head(10))" ] }, { "cell_type": "markdown", "id": "eda-findings-cleaning-decisions", "metadata": {}, "source": [ "## 01-10 EDA findings and cleaning decisions\n", "\n", "Main findings from this EDA notebook:\n", "\n", "- Keep the selected raw fields because they connect directly to the target or to simple model features.\n", "- Drop rows that cannot produce the target, especially rows missing **created** or **resolutiondate**.\n", "- Drop or review rows with invalid durations where **resolutiondate** is before **created**.\n", "- Review very short durations separately because they may create a large short-task cluster.\n", "- Review very long durations separately because they may represent stale or unusual tickets.\n", "- Keep basic text-length features from **summary** and **description** after handling missing or blank text.\n", "- Keep categorical fields such as priority and issue type, while grouping rare categories if needed later.\n", "- Convert **labels** into simple count or top-label features after normalizing empty label values.\n", "\n", "Cleaning notebook decisions to carry forward:\n", "\n", "- Remove duplicate rows.\n", "- Convert timestamp columns with errors=\"coerce\" and handle invalid dates.\n", "- Create duration_days only after timestamp checks.\n", "- Remove negative or missing target durations before model training.\n", "- Revisit the duration class cutoffs after checking class balance." ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.13.5" } }, "nbformat": 4, "nbformat_minor": 5 }