# Challenge 1.2: Computer System Failure Data Analysis (Model Abridged)

With the growing scale of supercomputing systems , scientists are now able to solve challenging computing problems in a matter of seconds which would take hundreds of years on a personal computer. However, with increasing scale (and complexity thereof) grows the probability of application failure, either due to hardware or software errors. Such application failures not only delay scientific progress, but also leads to a tremendous amount of wasted resources, both in terms of time and energy consumption. If we are able to predict when an application would fail due to a system error or due to software bugs, preventive mechanisms such as checkpointing can be initiated to save intermediate results, thereby, reducing the amount of wasted computation.

This assignment deals with predicting failure of application executions (referred to as “job”) on Purdue ITaP’s central computing cluster. This is data that we have collected, collated, and analyzed as part of two projects from the National Science Foundation (NSF), one completed (“Computer System Failure Data Repository to Enable Data-Driven Dependability Research”, Project No. CNS-1513197) and one ongoing (“Open Computer System Usage Repository and Analytics Engine”, Project No. CNS-2016704). 

For each job, we have data about the resources the job uses and whether the job succeeded or failed. The resources for which we have data are:
 1.	Memory
 2.	Network
 3.	Local IO
 4.	Network File System (NFS)

We are releasing the training data from 20,000 jobs, which has about 8% failure data (this is referred to as the “positive class”). You will build Machine Learning models in Python to predict whether a job will fail or not, given the resource usage data. More details about the training and the test data are presented in the "Data" section. 

The assignment, including the data, is available at the following Github repo:
https://github.com/bagchi/application-failure-prediction

There are two parts for this challenge problem with slightly different objectives: 
 [Challenge 1.1](https://www.kaggle.com/c/application-failure-prediction-part1/overview) and [Challenge 1.2](https://www.kaggle.com/c/application-failure-prediction-part2/overview). You must complete both parts and **upload your solutions separately**.

For **Challenge 1.2** you will perform the following steps:

1. Your objective is to create a Machine Learning model that achieves the highest **[balanced accuracy](https://www.kaggle.com/c/application-failure-prediction-part2/overview/definitions)** for predicting application failures given the resource usage data. However, compared to [Challenge 1.1](https://www.kaggle.com/c/application-failure-prediction/overview), you have the following restrictions.
2. In this assignment, you are only allowed to use **three features** from the dataset. You will use Principal Component Analysis (PCA) to identify which three features to use. You will again try to achieve the highest balanced accuracy with the three-feature model. We will call this _“Model Abridged”_. 
3. Give a short writeup explaining:
    a.	What did you do for the _Model Abridged_? Give the confusion matrix and the balanced accuracy that you obtained on the training data.
    b.	Compare the result you achieved for _Model Complete_ (Challenge 1.1) vs. _Model Abridged_ (Challenge 1.2).
    c.	Upload this writeup. You will upload the writeup to this (as well as integrated with the writeup for Challenge 1.1) to [this Dropbox folder](https://www.dropbox.com/request/f58oGdpPA94cLQUAk7t5).
4. Upload your Python code with a `README` that tells us how we can run your code. 
