{
  "fetched_at": "2026-10-19T08:04:34Z",
  "source_url": "https://www.kaggle.com/competitions/cuboulder-iot-f23/data",
  "pages": [
    {
      "name": "data-description",
      "content": "<h2>Files</h2>\n<ul>\n<li><strong>train.csv</strong> - The training set, the labeled training data, the known ground truth. Use this to train your model(s).</li>\n<li><strong>test.csv</strong> - The test set, the unlabeled data. This is what you make predictions on. Extract the id column and use that to create your predictions, see sample_submission.csv. Do not remove duplicates from the test data. Each row in the test data requires a prediction.</li>\n<li><strong>sample_submission.csv</strong> - A sample submission file in the correct format</li>\n</ul>\n\n<p> In the training set, the Category column will have each connection labeled as either normal or an attack with exactly one type of attack protocol specified. It was curated by MIT Lincoln Labs as part of the 1998 DARPA Intrusion Detection Evaluation Program. Lincoln Labs set up an environment to acquire nine weeks of raw TCP data dumps for a local area network (LAN) simulating a typical U.S Air Force LAN. They operated the LAN in a manner comparable to a true Air Force environment except they peppered the LAN with numerous attacks. Raw training data amounts to four gigabytes of compressed TCP dump data across seven weeks of network traffic. Approx five million connection records. Each connection is ~ 100 bytes with 41 features.</p>\n\n<p>In this competition, we are predicting if a given network connection is malicious or not. In cases where a connection is malicious, we are to identify the specific attack mechanism. Note that the test data includes a slightly more diverse set of attack patterns than the train set. </p>\n<p>Outside of a ‘normal’ connection, attacks can fall into one of 4 general categories. These are general categories of attack types, <strong>and are not the labels you are to predict</strong>, but to assist you in understanding the major attack categories. There are 4 general categories:</p>\n\n<ul>\n<li><strong>DOS</strong> - Denial of service; ex. via custom crafted data or flooding. An attacker overwhelms a system's resources so that it's too busy to handle legitimate requests or denies access to a legitimate user</li>\n<li><strong>R2L</strong> - (Remote to User) Unauthorized access from a remote machine; ex. guessing a password</li>\n<li><strong>U2R</strong> - (User to Root) Unauthorized access to root privaleges; ex. buffer overflow attacks, Dictionary attacks / password sniffing etc. will be leveraged here to gain root access</li>\n<li><strong>Probe</strong> - Surveillance & scanning; ex. port scanning</li>\n</ul>\n\n<table>\n <tr>\n    <th>Specific attack type (label)</th>\n    <th>General attack category</th>\n  </tr>\n<tr> <td>back</td>                   <td>dos </td> </tr>\n<tr> <td>buffer_overflow</td> <td>u2r </td> </tr>\n<tr> <td>ftp_write</td>            <td>r2l</td> </tr>\n<tr> <td>guess_passwd </td>  <td>r2l </td> </tr>\n<tr> <td>imap </td>                  <td>r2l </td> </tr>\n<tr> <td>ipsweep </td>            <td>probe  </td> </tr>\n<tr> <td>land </td>                  <td>dos </td> </tr>\n<tr> <td>loadmodule </td>      <td>u2r </td> </tr>\n<tr> <td>multihop </td>           <td>r2l </td> </tr>\n<tr> <td>neptune </td>           <td>dos </td> </tr>\n<tr> <td>nmap </td>               <td>probe </td> </tr>\n<tr> <td>perl </td>                  <td>u2r </td> </tr>\n<tr> <td>phf </td>                   <td>r2l </td> </tr>\n<tr> <td>pod </td>                 <td>dos </td> </tr>\n<tr> <td>portsweep </td>     <td>probe </td> </tr>\n<tr> <td>rootkit </td>            <td>u2r </td> </tr>\n<tr> <td>satan </td>             <td>probe </td> </tr>\n<tr> <td>smurf </td>             <td>dos </td> </tr>\n<tr> <td>spy </td>                <td>r2l </td> </tr>\n<tr> <td>teardrop </td>        <td>dos </td> </tr>\n<tr> <td>warezclient </td>   <td>r2l </td> </tr>\n<tr> <td>warezmaster </td> <td>r2l </td> </tr>\n\n</table>\n \n\n<h2>Partial List of Column Descriptions</h2> \n\n<table>\n  <tr>\n    <th>Feature</th>\n    <th>Description</th>\n    <th>Type</th>\n  </tr>\n  <tr>\n    <td>duration</td>\n    <td>length (number of seconds) of the connection</td>\n    <td>continuous</td>\n  </tr>\n  <tr>\n    <td>protocol_type</td>\n    <td>type of the protocol, e.g. tcp, udp, etc.</td>\n    <td>discrete</td>\n  </tr>\n  <tr>\n    <td>service</td>\n    <td>network service on the destination, e.g., http, telnet, etc.</td>\n    <td>discrete</td>\n  </tr>\n  <tr>\n    <td>src_bytes</td>\n    <td>number of data bytes from source to destination</td>\n    <td>continuous</td>\n  </tr>\n  <tr>\n    <td>dst_bytes</td>\n    <td>number of data bytes from destination to source</td>\n    <td>continuous</td>\n  </tr>\n  <tr>\n    <td>flag</td>\n    <td>normal or error status of the connection</td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>land</td>\n    <td>1 if connection is from/to the same host/port; 0 otherwise</td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>wrong_fragment</td>\n    <td>number of ``wrong'' fragments</td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>urgent</td>\n    <td>number of urgent packets</td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>hot</td>\n    <td>number of ``hot'' indicators</td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>num_failed_logins </td>\n    <td>number of failed login attempts</td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>logged_in</td>\n    <td>1 if successfully logged in; 0 otherwise </td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>num_compromised </td>\n    <td>number of ``compromised'' conditions </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>root_shell</td>\n    <td>1 if root shell is obtained; 0 otherwise</td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>su_attempted</td>\n    <td>1 if ``su root'' command attempted; 0 otherwise</td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>num_root</td>\n    <td>number of ``root'' accesses </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>num_file_creations</td>\n    <td>number of file creation operations </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>num_shells</td>\n    <td>number of shell prompts </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>num_access_files</td>\n    <td>number of operations on access control files </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>num_outbound_cmds</td>\n    <td>number of outbound commands in an ftp session </td>\n    <td>continuous</td>\n  </tr>\n    <tr>\n    <td>is_hot_login</td>\n    <td>1 if the login belongs to the ``hot'' list; 0 otherwise </td>\n    <td>discrete</td>\n  </tr>\n    <tr>\n    <td>is_guest_login</td>\n    <td>1 if the login is a ``guest''login; 0 otherwise </td>\n    <td>discrete</td>\n  </tr>\n</table>\n\n<p>\n<h2>Feature data types:</h2> \nduration: continuous. <br>\nprotocol_type: symbolic. <br>\nservice: symbolic. <br>\nflag: symbolic. <br>\nsrc_bytes: continuous. <br>\ndst_bytes: continuous. <br>\nland: symbolic. <br>\nwrong_fragment: continuous. <br>\nurgent: continuous. <br>\nhot: continuous. <br>\nnum_failed_logins: continuous. <br>\nlogged_in: symbolic. <br>\nnum_compromised: continuous. <br>\nroot_shell: continuous. <br>\nsu_attempted: continuous. <br>\nnum_root: continuous. <br>\nnum_file_creations: continuous. <br>\nnum_shells: continuous. <br>\nnum_access_files: continuous. <br>\nnum_outbound_cmds: continuous. <br>\nis_host_login: symbolic. <br>\nis_guest_login: symbolic. <br>\ncount: continuous. <br>\nsrv_count: continuous. <br>\nserror_rate: continuous. <br>\nsrv_serror_rate: continuous. <br>\nrerror_rate: continuous. <br>\nsrv_rerror_rate: continuous. <br>\nsame_srv_rate: continuous. <br>\ndiff_srv_rate: continuous. <br>\nsrv_diff_host_rate: continuous. <br>\ndst_host_count: continuous. <br>\ndst_host_srv_count: continuous. <br>\ndst_host_same_srv_rate: continuous. <br>\ndst_host_diff_srv_rate: continuous. <br>\ndst_host_same_src_port_rate: continuous. <br>\ndst_host_srv_diff_host_rate: continuous. <br>\ndst_host_serror_rate: continuous. <br>\ndst_host_srv_serror_rate: continuous. <br>\ndst_host_rerror_rate: continuous. <br>\ndst_host_srv_rerror_rate: continuous. <br>\n</p>\n\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Description",
      "content": "**Please note: This competition ends at 12/4/2023 5:59 AM UTC (Universal Coordinated Time), which is 12/3/2023 at 11:59pm**\n\n<p>Can machine learning identify when a network connection or intrusion is malicious? Network security is a universal concern. And, as attack mechanisms became more sophisticated, network security and identification mechanisms had to adopt newer strategies as well. This classroom challenge will introduce you to tackling network security issues with machine learning. </p>\n\n <p>Machine learning is used in a variety of security fronts. It’s used to detect malicious activity and stop attacks, analyze mobile endpoints, enhance human analysis, automate repetitive security tasks, and close zero-day vulnerabilities. </p>\n\n<p>MIT’s Lincoln Labs, as part of the 1998 Darpa Intrusion Detection Evaluation Program, set up an environment to acquire nine weeks of raw TCP data dumps for a local area network (LAN) simulating a typical U.S Air Force LAN. They operated the LAN in a manner comparable to a true Air Force environment except they peppered the LAN with numerous attacks. This labeled data is what you’ll be working with as you try to tackle network security. </p>\n\n<p>In this competition, you’ll build algorithms to identify if a connection is normal or part of a malicious attack. You’ll be building a multi-class classification model leveraging the network data provided by Lincoln Labs. Winning models will be sure to carefully consider feature engineering along with model selection to create flexible models able to handle varied network traffic. </p>\n\n<p>To be successful in this competition, you will need to build a machine learning classifier capable of identifying the type of connection and what type of traffic it is: normal or malicious. Along the way, you’ll gain familiarity with exploratory data analysis, data cleaning and preparation, feature engineering, model selection, and hyper parameter tuning. </p>\n\n<h2>Acknowledgements</h2>\n<p>We thank the MIT Lincoln Lab &amp; KDD.</p>\n\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Evaluation",
      "content": "<p>Submissions are evaluated on the categorization accuracy. Each correct identification is counted (from a correct solution.csv file not visible to you) and the score is expressed as a percent correct; 0.91 = 91% correct.</p>\n\n<h2>Submission Format</h2>\n\n<p><strong>For every connection in the test dataset</strong>, submission files should contain two columns: Id and Category. Id represents the unique TCP connection (the specific sample from the test.csv file identified in column \"id\") while Category represents the type of attack predicted by your model(s), i.e. the predicted y (target, label) value.</p>\n<p>The file should contain a header row, 489,844 prediction rows, and have the following format:</p>\n<pre>Id,Category<br>0,imap<br>1,normal<br>...<br>311028,neptune<br></pre>\n\n<p>\nA word about Kaggle Leaderboards. Rows in the solution.csv file are divided, for scoring purposes, into 30% for the Public Leaderboard and 70% for the Private Leaderboard. The Public Leaderboard gives you some idea of how you are doing against 30% of the correct solution. 70% is hidden from you, but show up on the Private Leaderboard only I can see. A combination of the Public and Private Leaderboard scores is used to determine the final score (and grade), see below.\n</p>\n\n<p>\nI have set the sample_solution.csv file, which has all predictions as normal, as the benchmark score you should be able to beat. The sample_solutions.csv file has a score of 0.199, or 19.9% correct. This score shows up on the Public Leaderboard. You can make 20 submissions per day while the competition is running.\n</p>\n\n<h2>Final Scoring and Letter Grade</h2>\n<p>\nYour letter grade on this assignment is calculated as follows: <br>\ncombined_score = (0.3 * Public_Score) + (0.7 * Private_Score) <br>\n<br>\nThe combined_score is then scaled to a point on a line defined by 2 points: <br>\n(x1, y1) = (0.199, 0.7) and, <br>\n(x2, y2) = (1.0, 1.0) <br>\nwhere y1=0.7 maps to a C- letter grade, and y2=1.0 maps to an A letter grade. <br>\n<br>\nNo submission receives a combined_score of 0, or a submission that has formatting errors and cannot be scored receives a combined_score of 0, both of which maps to an F letter grade.\n</p>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "rules",
      "content": "You can create your python notebooks: <br>\n* Here on this Kaggle Competition <br>\n* On Google Colab: https://colab.research.google.com <br>\n* On your local machine <br>\n* Or wherever you can create and run python notebooks <br>\n\nFor each student, the competition is limited to 20 submissions per day.\n\n<br>\nAll University Honor Code rules are in effect. **Students shall create their own work**. Do not share your python notebook(s) or code with any student or anyone else.\n\nMost importantly: Have fun! \n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    }
  ]
}