{ "metadata": { "name": "", "signature": "sha256:b0eb9b534082cfefbc26df49a4e010771e27afb7ad25a9e4b43276f6c5ea724e" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "# Java Class File Analysis\n", "In this notebook we're going to explore, understand, and classify java class files as being 'benign' or 'malicious'. We will explore the data, apply machine learning algorithms to the data, add new features, do more machine learning. Then we will test our classifier on a large amount of files to measure it's effectiveness.\n", "\n", "### References\n", "\n", "\n", "\n", "### Python Modules Used:\n", "\n", "\n", "\n", "### IPython Notebook for this talk: http://clicksecurity.github.io/data_hacking\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imports and plot defaults" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "print 'pandas version is', pd.__version__\n", "import numpy as np\n", "print 'numpy version is', np.__version__\n", "import sklearn\n", "print 'scikit-learn version is', sklearn.__version__\n", "import matplotlib\n", "print 'matplotlib version is', matplotlib.__version__\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "pandas version is 0.13.0\n", "numpy version is 1.7.1\n", "scikit-learn version is 0.14.1\n", "matplotlib version is 1.4.1\n" ] } ], "prompt_number": 117 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting defaults and helper functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "plt.rcParams['font.size'] = 18.0\n", "plt.rcParams['figure.figsize'] = 16.0, 5.0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 118 }, { "cell_type": "code", "collapsed": false, "input": [ "def plot_cm(cm, labels):\n", " # Compute percentanges\n", " percent = (cm*100.0)/np.array(np.matrix(cm.sum(axis=1)).T)\n", " print 'Confusion Matrix Stats'\n", " for i, label_i in enumerate(labels):\n", " for j, label_j in enumerate(labels):\n", " print \"%s/%s: %.2f%% (%d/%d)\" % (label_i, label_j, (percent[i][j]), cm[i][j], cm[i].sum())\n", "\n", " # Show confusion matrix\n", " # Thanks to kermit666 from stackoverflow\n", " fig = plt.figure()\n", " ax = fig.add_subplot(111)\n", " ax.grid(b=False)\n", " cax = ax.matshow(percent, cmap='coolwarm',vmin=0,vmax=100)\n", " plt.title('')\n", " fig.colorbar(cax)\n", " ax.set_xticklabels([''] + labels)\n", " ax.set_yticklabels([''] + labels)\n", " plt.xlabel('Predicted')\n", " plt.ylabel('True')\n", " plt.show()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 119 }, { "cell_type": "code", "collapsed": false, "input": [ "def extract_character_info(string):\n", " lowercase_runs = []\n", " uppercase_runs = []\n", " digit_runs = []\n", " lower = map(str.islower, str(string))\n", " upper = map(str.isupper, str(string))\n", " digits = map(str.isdigit, str(string))\n", " \n", " current_length = 0\n", " current = False\n", " for l in lower:\n", " if l:\n", " current_length += 1\n", " current = True\n", " else:\n", " if current:\n", " lowercase_runs.append(current_length)\n", " current_length = 0\n", " current = False\n", " if current:\n", " lowercase_runs.append(current_length)\n", "\n", " current_length = 0\n", " current = False\n", " for u in upper:\n", " if u:\n", " current_length += 1\n", " current = True\n", " else:\n", " if current:\n", " uppercase_runs.append(current_length)\n", " current_length = 0\n", " current = False\n", " if current:\n", " uppercase_runs.append(current_length)\n", "\n", " current_length = 0\n", " current = False\n", " for d in digits:\n", " if d:\n", " current_length += 1\n", " current = True\n", " else:\n", " if current:\n", " digit_runs.append(current_length)\n", " current_length = 0\n", " current = False\n", " if current:\n", " digit_runs.append(current_length)\n", " \n", " return lowercase_runs, uppercase_runs, digit_runs" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 120 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Function to extract out the features we are interested with from the json blob" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def extract_features(data):\n", " features = {}\n", " try:\n", " features['sha256'] = data['metadata']['sha256']\n", " features['size'] = data['metadata']['file_size']\n", " features['entropy'] = data['metadata']['entropy']\n", " if 'sourcefile' in data['characteristics']['java']:\n", " features['source file'] = data['characteristics']['java']['sourcefile']\n", " else:\n", " features['source file'] = 'No Source File'\n", " if 'access_permissions' in data['characteristics']['java']:\n", " features['ap_count'] = len(data['characteristics']['java']['access_permissions'])\n", " for ap in data['characteristics']['java']['access_permissions']:\n", " features[str.lower(str(ap).replace(\" \", \"_\"))] = 1\n", " features['class name'] = data['characteristics']['java']['class_name']\n", " features['class_name_slash_count'] = features['class name'].count('/')\n", " features['class_name_length'] = len(features['class name'])\n", " cn_lowercase_runs, cn_uppercase_runs, cn_digit_runs = extract_character_info(features['class name'])\n", " cn_lowercase_run_longest = 0\n", " cn_lowercase_run_average = 0\n", " cn_uppercase_run_longest = 0\n", " cn_uppercase_run_average = 0\n", " cn_digit_run_longest = 0\n", " cn_digit_run_average = 0\n", " if cn_lowercase_runs:\n", " cn_lowercase_run_longest = np.max(cn_lowercase_runs)\n", " cn_lowercase_run_average = np.mean(cn_lowercase_runs)\n", " features['class_name_lowercase_run_longest'] = cn_lowercase_run_longest\n", " features['class_name_lowercase_run_avg'] = cn_lowercase_run_average\n", " \n", " if cn_uppercase_runs:\n", " cn_uppercase_run_longest = np.max(cn_uppercase_runs)\n", " cn_uppercase_run_average = np.mean(cn_uppercase_runs)\n", " features['class_name_uppercase_run_longest'] = cn_uppercase_run_longest\n", " features['class_name_uppercase_run_avg'] = cn_uppercase_run_average\n", "\n", " if cn_digit_runs:\n", " cn_digit_run_longest = np.max(cn_digit_runs)\n", " cn_digit_run_average = np.mean(cn_digit_runs)\n", " features['class_name_digit_run_longest'] = cn_digit_run_longest\n", " features['class_name_digit_run_avg'] = cn_digit_run_average\n", " \n", " features['major version'] = data['characteristics']['java']['major_version']\n", " features['minor version'] = data['characteristics']['java']['minor_version']\n", " if 'method_names' in data['characteristics']['java']:\n", " features['method names'] = data['characteristics']['java']['method_names']\n", " else:\n", " features['method names'] = []\n", " features['methods_count'] = len(features['method names'])\n", " lowercase_run_longest = 0\n", " lowercase_run_average = 0 \n", " lowercase_runs = []\n", " uppercase_run_longest = 0\n", " uppercase_run_average = 0 \n", " uppercase_runs = []\n", " digit_run_longest = 0\n", " digit_run_average = 0\n", " digit_runs = []\n", "\n", " for method in features['method names']:\n", " lc, uc, d = extract_character_info(method)\n", " lowercase_runs.extend(lc)\n", " uppercase_runs.extend(uc)\n", " digit_runs.extend(d)\n", " \n", " if lowercase_runs:\n", " lowercase_run_longest = np.max(lowercase_runs)\n", " lowercase_run_average = np.mean(lowercase_runs)\n", " features['method_name_lowercase_run_longest'] = lowercase_run_longest\n", " features['method_name_lowercase_run_avg'] = lowercase_run_average\n", " \n", " if uppercase_runs:\n", " uppercase_run_longest = np.max(uppercase_runs)\n", " uppercase_run_average = np.mean(uppercase_runs)\n", " features['method_name_uppercase_run_longest'] = uppercase_run_longest\n", " features['method_name_uppercase_run_avg'] = uppercase_run_average\n", "\n", " if digit_runs:\n", " digit_run_longest = np.max(digit_runs)\n", " digit_run_average = np.mean(digit_runs)\n", " features['method_name_digit_run_longest'] = digit_run_longest\n", " features['method_name_digit_run_avg'] = digit_run_average\n", " \n", " if 'interfaces' in data['characteristics']['java']:\n", " features['interfaces'] = data['characteristics']['java']['interfaces']\n", " else:\n", " features['interfaces'] = []\n", " features['interface_count'] = len(features['interfaces'])\n", " features['constant_pool_count'] = data['characteristics']['java']['const_pool_count']\n", "\n", " except KeyError as ke:\n", " print 'ERROR:', ke, data['metadata']['sha256']\n", " return features" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 121 }, { "cell_type": "code", "collapsed": false, "input": [ "def load_files(file_list):\n", " import json\n", " features_list = []\n", " for filename in file_list:\n", " with open(filename,'rb') as f:\n", " features = extract_features(json.loads(f.read()))\n", " features_list.append(features)\n", " return features_list" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 122 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We read in the benign and malicious files" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Good files\n", "import glob\n", "\n", "good_list = glob.glob('data/clean/*.results')\n", "good_features = load_files(good_list)\n", "print \"Files:\", len(good_list)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Files: 500\n" ] } ], "prompt_number": 123 }, { "cell_type": "code", "collapsed": false, "input": [ "# Bad files\n", "bad_list = glob.glob('data/malicious/*.results')\n", "bad_features = load_files(bad_list)\n", "print \"Files:\", len(bad_list)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Files: 520\n" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "df_good = pd.DataFrame.from_records(good_features)\n", "df_good.fillna(0, inplace=True)\n", "df_good['label'] = 'benign'\n", "df_good.head()" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
acc_abstractacc_annotationacc_enumacc_finalacc_interfaceacc_publicacc_superacc_syntheticap_countclass nameclass_name_digit_run_avgclass_name_digit_run_longestclass_name_lengthclass_name_lowercase_run_avgclass_name_lowercase_run_longestclass_name_slash_countclass_name_uppercase_run_avgclass_name_uppercase_run_longestconstant_pool_countentropy
0 1 0 0 0 0 1 1 0 3 com/google/common/collect/ForwardingConcurrentMap 0 0 49 6.000000 9 4 1.0 1 54 4.990507...
1 0 0 0 0 0 0 1 0 1 org/apache/hadoop/io/compress/GzipCodec$GzipOu... 0 0 82 4.846154 8 5 1.5 5 39 5.205063...
2 0 0 0 1 0 0 1 0 2 com/google/common/collect/Multisets$Unmodifiab... 0 0 62 6.625000 11 4 1.0 1 131 4.996721...
3 0 0 0 0 0 0 1 0 1 hu/openig/mechanics/StaticDefensePlanner$1 1 1 42 5.666667 9 3 1.0 1 56 5.282413...
4 0 0 0 0 0 1 1 0 2 org/apache/commons/io/LineIterator 0 0 34 4.666667 7 4 1.0 1 95 5.285082...
\n", "

5 rows \u00d7 36 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ " acc_abstract acc_annotation acc_enum acc_final acc_interface \\\n", "0 1 0 0 0 0 \n", "1 0 0 0 0 0 \n", "2 0 0 0 1 0 \n", "3 0 0 0 0 0 \n", "4 0 0 0 0 0 \n", "\n", " acc_public acc_super acc_synthetic ap_count \\\n", "0 1 1 0 3 \n", "1 0 1 0 1 \n", "2 0 1 0 2 \n", "3 0 1 0 1 \n", "4 1 1 0 2 \n", "\n", " class name \\\n", "0 com/google/common/collect/ForwardingConcurrentMap \n", "1 org/apache/hadoop/io/compress/GzipCodec$GzipOu... \n", "2 com/google/common/collect/Multisets$Unmodifiab... \n", "3 hu/openig/mechanics/StaticDefensePlanner$1 \n", "4 org/apache/commons/io/LineIterator \n", "\n", " class_name_digit_run_avg class_name_digit_run_longest class_name_length \\\n", "0 0 0 49 \n", "1 0 0 82 \n", "2 0 0 62 \n", "3 1 1 42 \n", "4 0 0 34 \n", "\n", " class_name_lowercase_run_avg class_name_lowercase_run_longest \\\n", "0 6.000000 9 \n", "1 4.846154 8 \n", "2 6.625000 11 \n", "3 5.666667 9 \n", "4 4.666667 7 \n", "\n", " class_name_slash_count class_name_uppercase_run_avg \\\n", "0 4 1.0 \n", "1 5 1.5 \n", "2 4 1.0 \n", "3 3 1.0 \n", "4 4 1.0 \n", "\n", " class_name_uppercase_run_longest constant_pool_count entropy \n", "0 1 54 4.990507 ... \n", "1 5 39 5.205063 ... \n", "2 1 131 4.996721 ... \n", "3 1 56 5.282413 ... \n", "4 1 95 5.285082 ... \n", "\n", "[5 rows x 36 columns]" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "df_bad = pd.DataFrame.from_records(bad_features)\n", "df_bad.fillna(0, inplace=True)\n", "df_bad['label'] = 'malicious'\n", "df_bad.head()" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
acc_finalacc_publicacc_superap_countclass nameclass_name_digit_run_avgclass_name_digit_run_longestclass_name_lengthclass_name_lowercase_run_avgclass_name_lowercase_run_longestclass_name_slash_countclass_name_uppercase_run_avgclass_name_uppercase_run_longestconstant_pool_countentropyinterface_countinterfacesmajor versionmethod namesmethod_name_digit_run_avg
0 0 1 1 2 Main 0 0 4 3.0 3 0 1.000000 1 86 6.114522 0 [] 48 [<init>, init] 0...
1 0 0 1 1 YdCdHX/VcZaXVjyy 0 0 16 1.4 3 1 1.333333 2 52 5.539514 0 [] 49 [<init>, ktCgxlqo, <clinit>] 0...
2 0 1 1 2 aOcMSp 0 0 6 1.0 1 0 1.500000 2 159 5.953528 0 [] 49 [<init>, gvuNr, <clinit>] 0...
3 0 0 1 1 a/zylasqwjlpbqyrwrr 0 0 19 9.0 17 1 0.000000 0 478 6.348531 0 [] 49 [<init>, eiaxyercdfvbgscpbv, yginlmcynkyuohnfh... 0...
4 0 1 1 2 tljpjunbjwtqlywm/sdnrybknlf 0 0 27 13.0 16 1 0.000000 0 122 5.376762 0 [] 49 [<init>, dvvwse, <clinit>] 0...
\n", "

5 rows \u00d7 31 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ " acc_final acc_public acc_super ap_count class name \\\n", "0 0 1 1 2 Main \n", "1 0 0 1 1 YdCdHX/VcZaXVjyy \n", "2 0 1 1 2 aOcMSp \n", "3 0 0 1 1 a/zylasqwjlpbqyrwrr \n", "4 0 1 1 2 tljpjunbjwtqlywm/sdnrybknlf \n", "\n", " class_name_digit_run_avg class_name_digit_run_longest class_name_length \\\n", "0 0 0 4 \n", "1 0 0 16 \n", "2 0 0 6 \n", "3 0 0 19 \n", "4 0 0 27 \n", "\n", " class_name_lowercase_run_avg class_name_lowercase_run_longest \\\n", "0 3.0 3 \n", "1 1.4 3 \n", "2 1.0 1 \n", "3 9.0 17 \n", "4 13.0 16 \n", "\n", " class_name_slash_count class_name_uppercase_run_avg \\\n", "0 0 1.000000 \n", "1 1 1.333333 \n", "2 0 1.500000 \n", "3 1 0.000000 \n", "4 1 0.000000 \n", "\n", " class_name_uppercase_run_longest constant_pool_count entropy \\\n", "0 1 86 6.114522 \n", "1 2 52 5.539514 \n", "2 2 159 5.953528 \n", "3 0 478 6.348531 \n", "4 0 122 5.376762 \n", "\n", " interface_count interfaces major version \\\n", "0 0 [] 48 \n", "1 0 [] 49 \n", "2 0 [] 49 \n", "3 0 [] 49 \n", "4 0 [] 49 \n", "\n", " method names \\\n", "0 [, init] \n", "1 [, ktCgxlqo, ] \n", "2 [, gvuNr, ] \n", "3 [, eiaxyercdfvbgscpbv, yginlmcynkyuohnfh... \n", "4 [, dvvwse, ] \n", "\n", " method_name_digit_run_avg \n", "0 0 ... \n", "1 0 ... \n", "2 0 ... \n", "3 0 ... \n", "4 0 ... \n", "\n", "[5 rows x 31 columns]" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "df = pd.concat([df_bad, df_good], ignore_index=True)\n", "df.fillna(0, inplace=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 127 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's explore the data.\n", "\n", "#### We start by comparing the file sizes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='size', by='label')\n", "plt.ylabel('File Size')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 129, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 129 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Let's zoom in. We can see some separation between the files here." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='size', by='label')\n", "plt.ylabel('File Size')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')\n", "plt.ylim(0, 15000)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "(0, 15000)" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n/HU3DVrRAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 130 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Next we compare the entropy." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('entropy', 'label')\n", "plt.ylabel('Entropy')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 131, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 131 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Next we compare the number of items in the constant pool" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='constant_pool_count', by='label')\n", "plt.ylabel('Constant Pool Count')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nB497MY45HI/nAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 132 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### It's hard to see the detail, so we zoom in" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='constant_pool_count', by='label')\n", "plt.xlabel('')\n", "plt.ylabel('Constant Pool Count')\n", "plt.title('')\n", "plt.suptitle('')\n", "plt.ylim(0, 1000)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 133, "text": [ "(0, 1000)" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA+0AAAE7CAYAAACov2AIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcZFV5+P/PM4oMizIgERWNjUwEQXFUDC4RCwQ3jAv5\nGTWiM1EwKqAQ+cYNpQeJokFB3NeMuBAkIBEVF5RiE4GoA4JRROigEJRthGFfnt8f99ZMUVNdXdVd\n3fdWz+f9etWr6t576tTT9XrBnafOec6JzESSJEmSJNXPgqoDkCRJkiRJ3Zm0S5IkSZJUUybtkiRJ\nkiTVlEm7JEmSJEk1ZdIuSZIkSVJNmbRLkiRJklRTJu2SJEmSJNVUZUl7RLwrIk6MiCsi4r6IuHKK\n9ttFxCkRcWNErI6IsyJit0naLoiIgyPi1xFxe0RcFRFHRcTGM+1bkiRJkqS5EplZzQdH3AfcAPwc\n2Bn4c2Y+dpK22wIXAHcBxwA3A/sBTwBemJk/6mj/MeBA4GTgNGCH8vhsYI9s+6MH7VuSJEmSpLlS\nZdI+lpkT5etLgI17JO3fAF4OPDUzLy7PbQJcCtyRmdu3td0R+CVwUma+ou38AcCxwGsy8/jp9C1J\nkiRJ0lyqbHp8K2GfSplAvwRotpLq8v23Al8AHhcRT2t7y6vL52M6uvo8cBuwzwz6liRJkiRpzozC\nQnQ7AQ8Czuty7fzyeee2c08D7qWY8r5GZt4JXFRen27fkiRJkiTNmVFI2h9ZPl/d5Vrr3NYd7a/P\nzLsnab9lRDxwmn1LkiRJkjRnRiFpb634fmeXa3d0tGm97ta2W/tB+5YkSZIkac6MQtJ+W/m8YZdr\nCzvatF53a9tqn23tB+1bkiRJkqQ588Cpm1TumvK52zT11rn26e3XANtHxAZdpshvTTF1/p5p9g1A\nRFSz5L4kSZIkaV7KzOh2fhSS9l9STF9/ZpdrTy+f/7vt3AXAnsAuwDmtkxGxEFgCNGfQ9xpVbZUn\nqbtly5axYsWKqsOQJKn2lixZxsqVK6oOQ1KbiK75OjAC0+MzczVwKtCIiJ1a5yNiU2Bf4LLMvLDt\nLSdQTIE/qKOr/YCNgK/NoG9JkiRJkuZMZSPtEfFa4DHl4V8AG0TEoeXxRGZ+ta35u4DnAj+IiKOB\nWyiS8EcAe7X3m5mXRMQngQMi4iTgNODxwIEU+7F/vSOUvvuWVF9jY2NVhyBJUm01m8UD4KKLxhgf\nL143GsVDUn1FVdO8I+IM4DnlYSuI1pyAZmbu3tF+e+DI8j0PAn4GjGfmj7v0vYBipP2NwBhwHcUI\n/Psyc52F5Qbpu2yfTo+X6qXZbNLwXx2SJE1pyZImK1c2qg5DUpuIqF9Ne2buNmD7XwMv67PtfcBH\ny8dQ+5YkSZIkaa6MwkJ0kiRJkmbg/tPjcXq8NEIqmx4/ypweL0mSpFE1Pr42aZdUD72mx9d+9XhJ\nkiRJktZXJu2S5oVma86fJEnqadGiZtUhSBqASbskSZK0HlmypOoIJA3CmvZpsKZdkiRJkjQs1rRL\nkiRJkjSCTNolzQvWtEuS1B/vmdJoMWmXJEmSJKmmrGmfBmvaJUmSJEnDYk27JEmSJEkjyKRd0rxg\nfZ4kSf3xnimNFpN2SZIkSZJqypr2abCmXZIkSZI0LNa0S5IkSZI0gkzaJc0L1udJktQf75nSaDFp\nlyRJkiSppqxpnwZr2iVJkiRJw2JNuyRJkiRJI8ikXdK8YH2eJEn98Z4pjRaTdkmSJEmSasqa9mmw\npl2SJEmSNCzWtEuSJEmSNIJM2iXNC9bnSZLUH++Z0mgxaZckSZIkqaasaZ8Ga9olSZIkScNiTbsk\nSZIkSSPIpF3SvGB9niRJ/fGeKY0Wk3ZJkiRJkmrKmvZpsKZdkiRJkjQs1rRLkiRJkjSCTNolzQvW\n50mS1B/vmdJoMWmXJEmSJKmmrGmfBmvaJUmSJEnDYk27JEmSJEkjyKRd0rxgfZ4kSf3xnimNFpN2\nSZIkSZJqypr2abCmXZIkSZI0LEOpaY+IwyLiCT2u7xgR75tOgJIkSZIkaV2DTI8/DNipx/Unlm0k\nac5ZnydJUn+8Z0qjZZg17QuBe4fY3/1ExJYR8YGI+J+IWB0R10XEuRGxtEvb7SLilIi4sWx7VkTs\nNkm/CyLi4Ij4dUTcHhFXRcRREbHxbP0tkiRJkiT1o2dNe0RsBmwGBHAlcBBwSpemDwU+BGybmdsO\nPciIDYFfAI8DVgA/BTYBXg38NfDhzHxn2XZb4ALgLuAY4GZgP+AJwAsz80cdfX8MOBA4GTgN2KE8\nPhvYo1vxujXtkiRJkqRh6VXTPlXSfhiDTXl/R2b+24DxTSki9gB+ABydmW9vO78B8Gtgi8zcvDz3\nDeDlwFMz8+Ly3CbApcAdmbl92/t3BH4JnJSZr2g7fwBwLPCazDy+Szwm7ZIkSZKkoeiVtD9wivee\nCRxevn4f8E2KJLddAquB8zLzJzMJtIfbyuf/u98HZ94dETcAD4I1yflLgGYrYS/b3RoRXwAOj4in\nZeaF5aVXl8/HdHze54EjgX2AdZJ2SfXTbDZpNBpVhyFJUu15z5RGS8+kPTObQBMgIsaAz2TmT2c7\nqC5x/CQiTgP+JSImKKa/bwwsBZ4C/FPZdCeKBP68Lt2cXz7vDLSS9qdR1OFf0PF5d0bEReV1SZIk\nSZIqMdVI+xqZuWwW4+jHS4BPAt9oO3cLsHdmfqs8fmT5fHWX97fObd127pHA9Zl59yTtnxERD8zM\ne6YftqS54IiBJEn98Z4pjZa+k/aWiHgcsJhi8bl15txn5nFDiKvzMzegSNZfCBwFnFt+/v7A8RHx\n0sw8nWL0HeDOLt3cUT63rwq/8SRtO9vfPP3oJUmSJEmanr6T9ojYCjgO2LNHsyzbDNsbgZcCb8rM\nz7XFdDxwCfD5ctX4Vu37hl36WFg+39Z27jZgy0k+cyHF33PbJNcl1Yj1eZIk9cd7pjRaBhlp/wSw\nB/Ap4AzghlmJqLs9KBLoE9tPZubtEfFdihH3xwDXlJe2Zl2tc+1T568Bto+IDbpMkd+aYup816nx\ny5YtY2xsDIBFixaxZMmSNf/zazabAB577PEcHrfUJR6PPfbYY4899thjjz2e7HjlypWsWrUKgImJ\nCXrpueXb/RpGrAK+nplv6esNQxQR3wZeBGyVmdd1XPs0xUJ021GsLn8dcG5m7tHR7r3AcmCX1urx\nEfF+4D3Arpl5TlvbhRQ/SjQzc68u8bjlmyRJkiRpKHpt+bZggH4WACuHE9LAWqu7L2s/GRGLKKbN\n3whcnpmrgVOBRkTs1NZuU2Bf4LK27d4ATqAYwT+o4/P2AzYCvjbEv0GSJEmSpIEMkrSfDTxptgKZ\nwieB3wNHRsRxEfGmiHg38AtgK+DQtqHvdwF/Bn4QEe+IiLdQxP4I4MD2TjPzkrLvvSPipIjYNyI+\nAnyEYpT963Py10masda0I0mS1Jv3TGm0DFLT/nbgjIg4IzP/c7YC6iYzb4iIpwOHUawg/yrgdoqk\n/eDMPKWt7e8i4lnAkcA7KfZt/xnwgsz8cZfuDwImKBa724tiev2xwPtm7Q+SJEmSJKkPg9S0n0Gx\nONtiisXcrgDu7WyXmbsPM8A6sqZdkiRJkjQsvWraB0naJyjqv7t2VMrM3GbgCEeMSbskSZIkaViG\nshBdZo5l5jbl82SPeZ+wS6on6/MkSeqP90xptAyyEJ0kSZIkSZpDfU+P11pOj5ckSZIkDUuv6fF9\nrx4fEVdS1LRP2oSipv2xA8YnSZIkSZK6GGR6/P8CV3U8rgE2BMaAu8s2kjTnjjmmWXUIkiSNBGva\npdHS90h7ZjYmuxYRrwY+CrxpCDFJ0sBWrqw6AkmSJGn4hrIQXWYeD5xCkbhL0pwbG2tUHYIkSSOh\n0WhUHYKkAfQ90t6HlcA+Q+xPknpqNosHwPLla883GsVDkiRJGnVDWz0+Ij4FvCYzNxtKhzXm6vFS\n/Sxb1mTFikbVYUiSVHvNZtPRdqlmhrV6/K6TXNoC2BN4I3Dy4OFJkiRJkqRu+h5pj4j7pmhyOvDa\nzPzjjKOqOUfapfppNp0SL0mSpNE0lJF24PVdziVwI3BZZv5mOsFJkiRJkqTuhlbTvj5xpF2qH2va\nJUnqjzXtUv30Gmmf9pZvEbFlRGw5/bAkSZIkSVIvA235FhFbAx8EXgo8uDz3Z+BbwLsz8+qhRyhJ\nk2jf8u3LX24wNla8dss3SZIm5yi7NFoGWYjuL4Hzga2Ai4BLy0s7AEuAa4FdMvP3sxBnrTg9Xqqf\n8fHiIUmSJI2aYU2Pfz+wCHhxZj45M/cpH08B9qLY+u2ImYcrSYObmGhWHYIkSSOh2ZqmJmkkDJK0\nPw/4dGZ+t/NCZp4GfAp4/rACk6RBLFlSdQSSJEnS8A0yPf4O4KDM/Mwk198CHJ2ZGw4xvlpyerwk\nSZIkaViGNT3+amC3HtefDfxhkMAkSZIkSdLkBknavwG8IiKOjIjNWicjYrOI+CDwSuCEYQcoSf2w\nPk+SpP54z5RGyyBbvh1BMZr+L8DbI+Ka8vzWFMn/ubgQnSRJkiRJQ9N3TTtARGwALANeDmxTnr4C\n+CawIjPvGXaAdWRNuyRJkiRpWHrVtA+UtKtg0i5JkiRJGpYZLUQXEdtHxOOnaPP4iNh+ugFK0kwd\nc0yz6hAkSRoJ1rRLo6Vn0h4ROwO/otijvZfnA5dExJOHFZgkDWLlyqojkCRJkoZvqpH2/YArgU9M\n0e7jZbs3DyMoSRrU2Fij6hAkSRoJjUaj6hAkDWCq1eMbwEmZeW+vRpl5b0ScRLFAnSTNiWazeAAs\nX772fKNRPCRJkqRRN1XS/mjgN332dTnwlzMLR5L6156cT0w0GR9vVBiNJEmzL6LrOlWVcGFmaW5M\nNT3+Pvrfy/2BZXtJkiRJsyAzZ/xYuvSMofQjaW5MlbT/AVjSZ19PKttL0pxbtqxRdQiSJI2EFSsa\nVYcgaQBTJe0/Bl4dEQ/v1SgitgJeDfxoWIFJ0iCsYZckSdJ8NFXSfgywMfD9yfZhj4jtgO8BG5Xt\nJWnOueesJEn98Z4pjZae9eqZeVlEvBn4HMU+7OcAK4GbgQcDTwGeVTZ/Y2ZeNpvBSpIkSZK0Pol+\nFpGIiD2ADwFP7nL5F8A7MvP0IcdWWxGRLr4hSZIkSRqGiCAzu24PMdX0eAAy8/TMfCqwLfBS4LXl\n82Mz86nrU8IuqZ6c6SdJUn/Gx6uOQNIg+hpp1/050i7Vz7JlTVfDlSSpDxFNMhtVhyGpzYxH2iVJ\nkiRJ0tzruRCdJNVZs7l2WvyXv9xgbKx43Wi4BZwkSZNrVB2ApAGMVNIeEVsA7wZeBmwN3AJcArwv\nM89pa7cdxcJ5uwIPAn4OHJaZZ3TpcwHwNuCfgMcA1wHfKPu8bVb/IEkz0pmcW6MnSZKk+WZkkvaI\neAzQpNg3/ovAZcAi4InAI9vabQv8BLiLInG/GdiPYq/5F2bmjzq6Pho4EDgZ+DdgB+CtwJMjYg+L\n16XRMDHRxJEDSZL60cR7pjQ6RiZpB75KUYO/U2b+sUe7DwIPAZ6amRcDRMRxwKXAJ4HtWw0jYkeK\nhP2kzHxF2/krgWOBVwHHD/nvkDQLliypOgJJkkbD0qVVRyBpECOxenxE7Erxk+CBmfnJiNgA2KBz\n+npEbALcAJydmXt2XDsUOBzYJTMvLM8dQTHd/tmZeW5b2w3Lfs7MzL26xOMAvCRJkiRpKHqtHj/p\nSHtE/OV0Piwzr5rO+6bwovL59xFxKvAC4AER8Vvg8Mz8Wnl9J4oa9vO69HF++bwzcGH5+mnAvcAF\n7Q0z886IuKi8LkmSJElSJXpt+TYxjceVQ46vZbvy+fMUdeyvA15PUbf+lYhYVl5v1bZf3aWP1rmt\n2849Erg+M++epP2WETFKJQTSeqvZWkZekiT15D1TGi29EtLDp9HfbM0Zf3D5fDOwW2beAxARpwBX\nAB+IiC9TLFIHcGeXPu4onzduO7fxJG072988zbglSZIkSZq2SZP2zByfwzimcnv5fHwrYQfIzFXl\ndPnXUozGt2rcN+zSx8Lyub0O/jZgy0k+cyHFjxBu+yaNgIYbs0uS1BfvmdJoGZWp338on6/tcu3/\nyudFdJ8CT8e59qnz1wDbR8QGXabIb00xdf4euli2bBljY2PFBy9axJIlS9b8D7A15chjjz322GOP\nPfbYY4/rdjw+Do1GfeLx2OP18XjlypWsWrUKgImJCXoZePX4iNgdeDmwTXnqCuCbmXnGQB0N9pnL\ngC8BH8rMd3Vc+yrwD8Bi4E/AdcC5mblHR7v3Asu5/+rx7wfeA+yamee0tV1IsXp809XjpdHQbDbX\n/I9QkiRNLqJJZqPqMCS16bV6/IIBOllQJsinA/sDLywfBwA/ioivRETXDxmCU4BbgH3Kbd1aMT0C\neBnwm8y8IjNXA6cCjYjYqa3dpsC+wGWthL10AsUU+IM6Pm8/YCPga0gaCStXVh2BJEmSNHx9J+3A\n2ylGtE8EllAktRuVr08AXlO2GbrMXAUcQjFl/acRcXBEvBP4KcUU/wPbmr8L+DPwg4h4R0S8BTgb\neERHOzLzEuCTwN4RcVJE7BsRHwE+QjHK/vXZ+HskDd+qVY2qQ5AkaUQ0qg5A0gD6nh4fEZcCf8jM\n53e5FsBpwKMzc8fhhni/z3k58C/AE4H7gJ8AyzPzvI522wNHAs+h2Lf9Z8B4Zv64S58LKEba3wiM\nUUyvPwF4X2Z2XYTO6fFS/YyPFw9JktRbBPhPWaleek2PHyRpvx04JDM/Ocn1A4CjMnNht+vziUm7\nVA/NZvEAWL68yWGHNQBoNIqHJElalzXtUv30StoHWT3+NuDhPa5vBdw6SGCSNBPtyfnEhCPtkiT1\nY+nSqiOQNIhBatrPAvaPiCd0XoiIHSkWpztrWIFJ0iDGxhpVhyBJ0khYsaJRdQiSBjDI9PidgPOA\nDYBvAZeWl54A/C1wF/DMzLx4FuKsFafHS/XTbDolXpIkSaNpKFu+lcn4c4ALgb2B95aPlwMXAM9Z\nHxJ2SXXVrDoASZJGQrO1IIykkTBITTuZ+d/AsyLiYcA25ekrM/NPQ49MkiRJkqT1XN/T47WW0+Ol\n+nF6vCRJkkbVUKbHt3W2e0R8PCK+XT6OjYjdZh6mJE2fM/0kSeqPu61Io2WQhegWAMcB/1Cear2x\n9WvA14DXrQ9D0I60S/WzbFnT1XAlSeqD+7RL9TOsfdrfTpGwnwj8K/Dr8vz2wLuA1wAXAUdNP1RJ\n6l+zuXaE/ctfhrGx4nX7/u2SJEnSKBtkpP1S4A+Z+fwu1wI4DXh0Zu443BDrx5F2qX7Gx53uJ0lS\nPyLAf8pK9TKsmvbHUuzPvo4yg/02sO3g4UmSJEmSpG4GSdpvAx7e4/pWwK0zC0eSpmfRombVIUiS\nNCKaVQcgaQCDJO1nAftHxBM6L0TEjsD+ZRtJmnNLllQdgSRJo2Hp0qojkDSIQWradwLOAzagmCZ/\naXnpCcDfAncBz8zMi2chzlqxpl2qH/dplyRJ0qgayurxmXlxRDwH+Biwd/lo+QnwtvUhYZdUTybt\nkiRJmo8GmR5PZv53Zj6Lorb9GeXj4Zn5N5n5s9kIUJL6MTHRrDoESZJGQrO1X6qkkTDlSHtEPA54\nK8XK8NcDx2XmD4E/zXJsktST+7RLkiRpvutZ0x4RO1DUsT+47XQCyzLzK7McW21Z0y7Vj/u0S5Ik\naVTNZJ/2Q4GNgEOAnYC/A64BjhxqhJIkSZLmhD9yS6NlqqR9V+DLmfnRzLwkM78JHAw8IiK2m/3w\nJKk/7tMuSVJ/li9vVh2CpAFMlbQ/DPhpx7nzy+ethh+OJE2P+7RLkiRpPpoqaX8gcHvHudvbrklS\nLTRceU6SpD41qg5A0gAG2vKt5ApskiRJkiTNgalWj78PuAO4p/00sMkk5zMzHzILcdaKq8dL9dNs\nNh1tlySpDxFNMhtVhyGpTa/V46ea4n7WgJ9lJitJkiTV2NKlVUcgaRA9R9rVnSPtkiRJkqRhmck+\n7ZIkSZIkqSIm7ZLmhWazWXUIkiSNBO+Z0mgxaZckSZIkqaZM2iXNE42qA5AkaSS424o0WkzaJc0L\nK1ZUHYEkSaNhfLzqCCQNwtXjp8HV46X6WbKkycqVjarDkCSp9tynXaqfmezT3t7J64CzMnNikutj\nwK6Zedw0YpSkgTWbxQPgoovWjhw0GsVDkiRJGnWDTI9fATyzx/WnA/8+o2gkadoaVQcgSdKIaFQd\ngKQB9D09PiLuA/bJzK9Pcv21wL9nZt+j96PK6fFS/SxaBKtWVR2FJEn1FwH+U1aql17T44eyEF1E\nbA68CPi/YfQnSYNasKBZdQiSJI2IZtUBSBpAz6Q9Ig6LiPsi4t7y1FfL4/bHvcANwCuB/5jtgCWp\n5Zhj1tav33TT2tfHHFNtXJIk1dnSpVVHIGkQPafHR8TLgJeVh68Dzgau7GiWwGrgPOD49WHeuNPj\npfppNNYuSidJkiSNkmmvHp+ZpwCnlJ2MAUdk5unDDlCSZsp6dkmSJM1Hfde0Z2bDhF1SXd1xR7Pq\nECRJGglNp6ZJI2XghegiYuOI2CEinh0Ru3Y+ZiPIHnFcUdbVf7zL9e0i4pSIuDEiVkfEWRGx2yR9\nLYiIgyPi1xFxe0RcFRFHRcTGs/+XSBqGhQurjkCSJEkavr63Z4uITYCPAv/Y430JPGAIcfXjcGDL\nts9dIyK2BX4C3AV8CLgZ2A/4fkS8MDN/1NHX0cCBwMnAvwE7AG8FnhwRe1jALtVTs7m2jv2iixqM\njxevWwvSSZKkdTW8SUojZZA91Y8B3gB8FziDYsX4SkTEU4C3Af+P4oeETh8EHgI8NTMvLt9zHHAp\n8Elg+7a+dqRI2E/KzFe0nb8SOBZ4FXD87PwlkiRJ0twaH2fND92S6q/n6vH3axhxPfCDzPyH2Q1p\nyjgeAFwAXE2RbF8JfCIz31pe34TiB4WzM3PPjvceSjFCv0tmXlieOwJ4N/DszDy3re2GZT9nZuZe\nHf04+C7VzOLFTS6/vFF1GJIk1V5Ek8xG1WFIatNr9fhBatoXUoywV+1gYDvgAKDbH7UT8CCKLeg6\nnV8+79x27mnAvRQ/BKyRmXcCF5XXJUmSJEmac4Mk7T8D/mq2AulHRGwDLAeWZ+ZVkzR7ZPl8dZdr\nrXNbd7S/PjPvnqT9lhExSBmBpAosXtyoOgRJkkZEo+oAJA1gkGT0ncCpEXFia2p5BT4DXE73OvaW\n1orvd3a5dkdHm9brbm0729/cZ4yS5kj7QnTf/z4uRCdJkqR5Z5Ck/Y3A74HzIuI84AqKaeX3k5mv\nH1Js9xMR+wB7UNSer/O5bW4rnzfscm1hR5vW6y27tG21z472kmqiPTk/9tgm4+ONCqORJGlUNHG0\nXRodgyTtS9teP6t8dDP0pL1cFO6jwHeAP0bE4vJSa5r7onKbt+uBazqutWuda586fw2wfURs0GWK\n/NYUU+fv6exo2bJljI2NFR++aBFLlixZs31Gsxz689hjj2f3uNmEFSuK45tuKkbaJyaaLFkCBx1U\nfXwee+yxxx57XMfjpUvrFY/HHq+PxytXrmTVqlUATExM0Evfq8dXKSIWATf20fQQ4LMUyfu5mblH\nRz/vpaiJb189/v3Ae4BdM/OctrYLKVaPb7p6vFRPzWbxAFi+HA47rHjdaBQPSZIkaRT0Wj1+VBZY\nWw28gmKqeruHAZ8CTgO+CFycmbdGxKnA3hGxU9s+7ZsC+wKXddTkn0Cx5dtBwDlt5/cDNgK+Ngt/\njyRJkiRJUxqJkfbJRMQYRW39mn3ay/PbUmzhdjdwNHALRRK+I7BXZv6wo59jKbaQ+ybFDwCPp9gD\n/pzM3L3L5zrSLtXMFls0ufHGRtVhSJJUe81mc800XUn1MLSR9ojYAngD8NfA5tx/y7gAsluSO9cy\n83cR8SzgSIpV7x9EsWXdCzLzx13echAwQbHY3l7AdcCxwPvmJGBJM7bFFlVHIEmSJA1f3yPtEfEY\n4CfAI4A/A5tR1HxvQZGwXw/cmpnbzE6o9eFIu1QP1rRLkiRpPhjWSPsRFIn6HsDFwJ+AVwE/pagJ\nfzXwnJmFKkn960zOW/u0S5KkyY2Pe8+URsmCqZus8VzgC53TyzPz1sx8D/BL4EPDDE6S+jUx0aw6\nBEmSRsLy5c2qQ5A0gEGS9odSJOZQLPAGxerqLT8E9hxGUJI0qE03rToCSZIkafgGSdqvo6hfh2I1\n9juA9vr1Dbh/Ei9Jc2b16kbVIUiSNCIaVQcgaQCDJO2/Ap4EkJn3UWyp9uaIeExEbEOx8vqvhx+i\nJE1t5cqqI5AkSZKGb5CF6E4B3h4RG2Xm7cDhwA+AK8vr9wF/N+T4JGlS7avHX3RRk/HxBuDq8ZIk\n9dbE0XZpdPSdtGfmp4BPtR3/OCKeAfwDcC9wcmb+ZPghSpIkSaNtiy3gppuqjmKt6Lqx1NzbfHO4\n8caqo5DqbZCR9nVk5oXAhUOKRZJmoFF1AJIkTeqmmyCz6ihaGlUHsEZdfjyQ6iyyz/97RMSVwNsy\n81uTXH8xcGxmPnaI8dVSRGS/35ukubHpprB6ddVRSJLUXUSdkvb68HuRChFBZnb9GWuQkfbHAL02\nVdoUGBugP0makfaa9ltvtaZdkqR+NJtNGt4opZExyOrxU3kYcNsQ+5MkSZIkab3Wc3p8RDwHeA4Q\nwGHAycDFXZo+FHgV8NvM/JtZiLNWnB4v1c/DHw7XXlt1FJIkdec08O78XqTCTKbH7wa8r+147/LR\nzeXAwYOHJ0nT0z49/o9/hPHx4rXT4yVJkjRfTDXSvhmweXl4BUVS/l8dzRJYnZk3zEqENeRIu1Q/\nixc3ufzyRtVhSJLUVZ1GlOtU016n70Wq0rRH2jPzz8Cfy052B36VmX8afoiSNLj2kfbf/c6RdkmS\nJM0/fW/5NmkHETtTjMafnZl3DCWqmnOkXaqfxYvh8surjkKSpO4cUe7O70Uq9Bpp73v1+Ig4JCJO\n7Th3PHAB8H3gkojYakaRStI0uUe7JEmS5qNB9ml/FUWCDqyZLv9K4Hjgl8ChwDuAfx5mgJI0mfsv\nROc+7ZL4Pz/OAAAUlklEQVQk9aNONe2SpjZI0j4GrGg7fhlwLfDazLwvIrYEXoJJuyRJkiRJQ9H3\n9HhgE+D2tuPdgdMz877y+H+ARw0rMEkaTKPqACRJGgmOskujpe+F6CLid8C3M/NtEfEY4Epgv8z8\nYnn9EOA9mbl5r37mAxeik+rHhegkSXXmgmvd+b1IhaEsRAd8C3hzRHwCOAm4C/hO2/UdgYnpBilJ\nM9OsOgBJkkZCs7UgjKSRMEhN+/uBnYC3AHcCb8vMawEiYmNgb+CLQ49QkvqweHHVEUiSJEnDN/A+\n7RGxGXB7Zt7Vdm4jYDvgqsy8cbgh1o/T46V6aF89fvlyOOyw4rWrx0uS6sZp4N35vUiFXtPjB07a\nZdIu1dH4ePGQJKmOTE6783uRCr2S9kGmx7c6exywGHgosE6nmXncwBFK0gz99KdNXEFekqSpuU+7\nNFr6TtojYivgOGDPHs2ybCNJc2piouoIJEmSpOEbZMu3EykWm/s0cAZwQ7d2mdkcVnB15fR4qX4e\n/nC49tqqo5AkqTungXfn9yIVhjU9fk/gs5l5wHDCkqSZaV+I7o9/XFvT7kJ0kiRJmi8G2ad9AbBy\ntgKRpEGtXNmeuDfXvF7p/6kkSZqU+7RLo2WQkfazgSfNViCSNKglS2DVquL1mWeuHV1fsqSykCRJ\nkqShGqSmfXuKWvYDM/M/ZzWqmrOmXaofa9olSXVm7XZ3fi9SYSj7tEfEGcDWFNu9XQ1cAdzb2S4z\nd59+qKPBpF0aroiu/38a0GnAC2fci/9tS5Jmg8lpd34vUqFX0j5ITfs2wAbAVRTJ+mOAx3Y8tplZ\nqJLWR5k548fRRy8cSj+SJM131rRLo6XvmvbMHJvFOCRpRqxjlyRJ0nzU9/R4reX0eEmSJA3CaeDd\n+b1IhWFNj291tllE/F1EHFI+9o6IB888TEmavtYe7ZIkSdJ8MtBIe0TsB3wE2LTj0i3A2zPzC0OM\nrbYcaZfqJ6JJZqPqMCRJ6qpOI8rNZpNGa5/UitXpe5Gq1Gukve+a9oh4CfBZilXjDwV+VV7aATgQ\n+GxE/CkzvzXDeCVJkiRJEoNt+XYOsAWwS2be0nHtwcD5wI2Z+TdDj7JmHGmX6sdf6iVJdeZ9qju/\nF6kwrJr2JwErOhN2gPLcCmBW1m+OiMdFxOER8dOI+FNE3BwRv4iId0fExl3abxcRp0TEjRGxOiLO\niojdJul7QUQcHBG/jojbI+KqiDiqW7+SJEmSJM2lQZL2AHr9Djabv5G9HjgI+C2wHDgE+A1wBPCT\niFi4JsiIbYGfALsAHwL+H0UN/vcj4rld+j6aok7/EuAA4ETgrcCpEdH1lw5JddSsOgBJkkaC+7RL\no6XvmnbgImBZRHw6M1e3X4iITYFlZZvZcCLwrx2j/J+LiN8C7wHeAHyyPP9B4CHAUzPz4jK+44BL\nyzbbt8W9I0U9/kmZ+Yq281cCxwKvAo6fpb9J0hAtXVp1BJIkSdLwDVLT/jLgZOByioT20vLSEygS\n38XA3pl5yizEOVlMT6T4oeAzmfmWiNgEuAE4OzP37Gh7KHA4RU3+heW5I4B3A8/OzHPb2m5Y9nNm\nZu7V5XOtaZckSVLfrN3uzu9FKgxl9fjMPCUiDgA+TJG0t7sV2H8uE/bSo8rnP5bPOwEPAs7r0vb8\n8nln4MLy9dOAe4EL2htm5p0RcVF5XZIkSZKkSgxS005mfgp4NMW08XeVj78HHpWZnx5+eJOLiAcA\n7wXuBr5enn5k+Xx1l7e0zm3ddu6RwPWZefck7beMiEFKCCRVxPo8SZL64z1TGi0DJ6SZeRPwjVmI\nZVDHAE8H3pWZvy3PtVZ8v7NL+zs62rRed2vb2f7mGcQpSZIkSdK09Bxpj4gHRMSHIuJNU7R7c0R8\nMCIGGrmfroh4P7A/8NnM/FDbpdvK5w27vG1hR5vW625tW+2zo72kmmo0GlWHIEnSSPCeKY2WqUba\n96HYMu2vp2h3AfAJ4FfAV4YQ16QiYpxixfgvZeabOy5fUz5vzbpa59qnzl8DbB8RG3SZIr81xdT5\ne7rFsWzZMsbGxgBYtGgRS5YsWfM/wNaUI4899njujpvNBuPj9YnHY4899thjj9uPoUmzWZ946nIM\n9YrHY4/n6njlypWsWrUKgImJCXrpuXp8RHwH2CAzn9ezl6LtaQCZ+cKp2k5XmbC/D1iRma/vcn1T\n4Drg3Mzco+Paeyn2eG9fPf79FD8A7JqZ57S1XUixenzT1eOl0RDRJLNRdRiSJHVVp1XSm83mmuSh\nanX6XqQq9Vo9fsEU730q8MM+P+cM4CmDBDaIiHgfRcJ+XLeEHaDcP/5UoBERO7W9d1NgX+CyVsJe\nOoFiCvxBHV3tB2wEfG14f4EkSZIkSYOZaqT9LmC/zPzylB1F/CNFjfmDhhhfq+/9gY8DV1GsGN8Z\n9LWZeXrZdluK6fp3A0cDt1Ak4TsCe2Xm/X6EiIhjgQOAbwKnAY+n2Hf+nMzcfZJ4HGmXasZf6iVJ\ndeZ9qju/F6kwk33abwG27PNzHgqsHiSwAexMkag/Guj2A0ITOB0gM38XEc8CjgTeSbFv+8+AF2Tm\nj7u89yBgAngjsBfF9PpjKUb1JUmSJEmqzFQj7WcDt2Xm86fsKOJ7wCaZ+ewhxldLjrRL9WNNuySp\n1qLrAFolmrSWf6sJ/10tzaim/SRgz4h42RQf8BLgeWV7SZpzS5dWHYEkSZMLskhO6/A444zqYygf\nsU7Vq6ROU420bwz8AhgDPgJ8LjMn2q5vQ7HA2yHAlcCTM/P2WYy3FhxplyRJ0iCs3e7O70Uq9Bpp\n75m0l29eDHwbeBxFXfnNFLXuDwY2K5v9BnhxZv5uWEHXmUm7JEmSBmFy2p3fi1SYyfR4MvNy4MnA\n24BzgPuAR5TPZ5fnn7K+JOyS6qnZbFYdgiRJI8F7pjRaplo9HoByyvvHy4ckSZIkSZoDU06P17qc\nHi9JkqRBOA28O78XqTCj6fGSNArGx6uOQJIkSRo+k3ZJ88Ly5c2qQ5AkaSRY0y6NFpN2SZIkSZJq\nypr2abCmXaofa+IkSXXmfao7vxepYE27JEmSJEkjyKRd0jzRrDoASZJGgjXt0mjpa592SZrMFlvA\nTTdVHUUhuk4omnubbw433lh1FJIkSZoPrGmfBmvapbWsRVuX34kkqZP3hu78XqSCNe2SJEmSJI0g\nk3ZJ84L1eZIk9cd7pjRaTNolSZIkSaopa9qnwZp2aS1r0dbldyJJ6uS9oTu/F6nQq6bd1eMlSZKk\nOVCXXU7qZPPNq45Aqj+nx0uaF6zPkyTVWWZ9HtCsPIbWwy1SpamZtEuSJEmSVFPWtE+DNe3SWtai\nrcvvRJJUZ96npPpxn3ZJkiRJkkaQSbukecGadkmS+tWsOgBJAzBplyRJktYjS5dWHYGkQVjTPg3W\ntEtrWRe3Lr8TSZIkDcKadkmSJEmSRpBJu6R5wZp2SZL64z1TGi0m7ZIkSZIk1ZQ17dNgTbu0lvXb\n6/I7kSRJ0iCsaZc0a5IoslQfax5J1//fSpJUC+PjVUcgaRCOtE+DI+3SWnUZVW42mzQajarDAOrz\nnUiS1E1Ek8xG1WFIauNIuyRJkiRJI8iR9mlwpF1ay1HldfmdSJLqzPuUVD+OtEuSJEmSNIJM2iXN\nC+45K0lSv5pVByBpAA+sOgBJoy9cLP1+Nt+86ggkSZrc0qVVRyBpENa0T4M17VL9WJ8nSZKkUWVN\nuyRJkiRJI8ikXdI80aw6AEmSRoLrwEijxaQdiIgFEXFwRPw6Im6PiKsi4qiI2Ljq2CRJkiRJ6y9r\n2oGI+BhwIHAycBqwQ3l8NrBHZwG7Ne1S/VjTLkmSpFFlTXsPEbEjRYJ+Umb+f5n5xcx8O/DPwG7A\nqyoNUFJfDjus6ggkSRoN4+NVRyBpEOt90g68unw+puP854HbgH3mNhxJ09FoNKsOQZKkkbB8ebPq\nECQNwKQdngbcC1zQfjIz7wQuKq9LqrmVK1dWHYIkSSPCe6Y0Sh5YdQA18Ejg+sy8u8u1q4FnRMQD\nM/OeOY5L0gBWrVpVdQiSJM26iK4lr9Po5+AZ9+EaT9LccKQdNgbunOTaHW1tJM2SiJjxY/ny5UPp\nR5KkOsvMGT8OO+ywofQjaW6YtBd16xtOcm0hkGUbSbNkGP9wWLp0qf8AkSSpDxMTE1WHIGkA6/2W\nbxHxfWB3YOPOKfIRcS6wODO36ji/fn9pkiRJkqShmmzLN2vaiwXo9gR2Ac5pnYyIhcASoNn5hsm+\nTEmSJEmShsnp8XACxRT4gzrO7wdsBHxtziOSJEmSJAmnxwMQEccCBwDfBE4DHg8cCJyTmbtXGZsk\nSZIkaf3lSHvhIOAQYEfgE8DfA8cCL64yKGlURcSyiLgvInatMIZGGcPSqmKQJGk2RcSKiLiv49x4\nef/7y2n0N+33Spo91rQDmXkf8NHyIWn+yPIhSdJ81Xmfm8m9z/umVEOOtEuar86kWJfiq1UHIknS\nLOpcIPkIYKPMvGoafc3kvZJmiSPtkualLBbsuKvqOCRJmkuZeS9w71y/V9LscaRd0mzaoKyP+9+I\nuCMiLoqIV3Y2ioidI+KbEXFd2e7XEfHuiHhAR7tmRFwZEY+IiOMj4saIuDUivhcRf9XRtmtNe0Q8\nNCK+FBE3RMQtEfGjiFjS6ruj7UREnBER20fEdyLi5ohYFREnRsRWw/yiJEmjr21Nl90j4tDyPnJb\nRJwfEc8q2zQi4pyIWB0R10TEoR19PC8iToiIK8r33hQR3+93nZjJ6tIj4iER8a8R8T8RcXtEXB8R\nZ7ffl3u8dywivhIRfyzv05eXfW3U0W6dGvu2a/dFxL93nHtdRFxQ/o2rI+J3EfHViNiyn79VWl84\n0i5pNn0I2JhigccA/hE4PiIWZuaXASJiL+Bk4DLgKOBG4JnA4cASioUhWxLYBDgLOA94F/BY4G3A\nf0XEE8o1Kuh4D+VnbQicDjwJ+HfggvL16eXndqsL3Bo4o4zxv8qY/gl4CPD8aXwnkqT570iKwbFj\ngA2BtwPfi4g3AJ8GPgN8BXglcHhEXJmZrW2GlwKLgBXAH4BHAfsCP4qI3TLznEGDiYhFwDnADsCJ\nwCeBBwBPAfai2AJ5svc+huJ++WDgU8Bvgd0o7sHPiojnliP0Lb1q4tvvya+l+BvPAt4L3A78JfBC\n4C+A6wf5G6X5zKRd0mx6KLBTZt4CEBGfAS4GPhoR/0GRyH+RIgHfvS3h/nxEXFS2e05mnlmeD2BL\n4MOZeVTrQyLiOuDDwB7AD3rE8waKJP09mfnBtvf/kuIfMBMd7QNYDPx9Zv5nW/v7gLdExOMy87K+\nvw1J0vpiAfD0zLwHICJ+RfHD79eAXTLz5+X5LwH/C+xfXgPYLzNva++svH9eSpEo7zWNeD5AkbC/\nMTO/0NF3Z018t/duCbwoM79XnvtMRPwvxe5LS4EvtXfZZ0wvB27m/vd/gMP6fL+03nB6vKTZ9OlW\nwg6QmTdTjC5sTvEr/Z7Awyh+ad8iIrZsPYDTyrc9r6PPeym2ZGx3Rvm8eIp4/ha4B/hYx/kvUPzD\noZur2xP2AT9PkrR++nQrYS+1RsfPayXsAJl5N3Ah8Fdt59Yk7BGxaUQ8FLiPYrR7l0EDiYgFwKuA\nX3Um7OXnTToyXr73JcDP2xL2lg+Wcb180JhKqyhmz724jx8OpPWaI+2SZtP/9Dj3WGDT8vWXurSD\nYhrdwzrOXZOZnQvM3VA+P3SKeLYp33+/EYzMvLusZ9+sy3uu6HKu38+TJK2f7nfvyMybyrz0yi5t\nb6LtfhIR2wL/SlGC1Xlf6lovPoUtKabbf3ca7/0LisT60s4L5d90LcW9dTo+AOwKnALcEBFnUvxg\nf0Jmrp5mn9K8ZNIuqSrtv+wfAqycpN01Hce9VrWdjV/q5/rzJEmjb7J7R8+V2SNiU4oa742Ao4Ff\nArdQJOvvppilVmddR+0jYp2cIzMvj4gdgOeWj+cAnweWR8SumdntR3NpvWTSLmk27QCc2uUcFKMQ\nG5evb8vMH89BPBPAcyNik8y8tXUyIjagGCm4cQ5ikCSpUyvZfS7wCOAfWwu2tkTEB6bZ9/UUo/lL\npvHe6yh+NNix80JEbE4R68/bTt9YXluUmavazj+2W+flzLnTygcR8ULgO8A/AwdMI15pXrKmXdJs\nenNEPKR1EBGbAW+i+MfDmcD3gT8B7yxv/vcTERuVow7D8i2K1XLf1nF+P4rV4CVJqlJrJP5+/0aP\niOcBfz3Je3qt1k65yNvxwA4R8fpBginfeyrwlIjo3DHlnRQzzr7Zdu435fOeHW3f3tn3JNu6/aJ8\nXuffBNL6zJF2SbPpOuD8cl/W1pZvjwL2zcw7oNijlaKe7TflKrq/o6i9255icZuXUUwVbJnJlPQv\nUGzXdkRELKZY/Gcnim3lLqdI6CVJmmute9s5wLXARyJiDLiaYoR8H4qp8k/s8d5eDgV2B75Q/gBw\nbvm+JwMPyMzX9XjvuymS8FMi4lMU9+ldKe6dZwLtMwKOp6hV/1xEbE/xI/0L6L4GzA8i4iaKv/n3\nFPf+ZRSlAF/p42+S1hsm7ZJmSwLvoLix7w9sRfEL/Gsy8z/WNMr8QUQ8jeIX+30oFr25iSKJ/gjF\nP1La++w5otAlhrUHmXdFxHOBfwNeSvEPjgsotor7PLCw1/sHuCZJWn8Nen9Yc2/LzFXliPaHgQMp\n/q3+3xR7l+8LPGGy9/Y6V/b7DIoEfG+KH8VvoVhg7uNTvPeqiNgFOJziPr2IIsn+AHBE+3ZtmXlL\nRLwI+Gj5WauBk4DXUNzb232K4j78RmALikVefw7s37bVqyQgeuzyIEnrhYh4AEXN33mZ+aKq45Ek\nSZJarGmXtF6JiM7RdCjq7DcDfjjH4UiSJEk9OdIuab0SEV8FNgTOA+4EngG8mmI6/lPaV5WXJEmS\nqmbSLmm9EhGvpaixfxywKcWCP98F3puZ11UZmyRJktTJpF2SJEmSpJqypl2SJEmSpJoyaZckSZIk\nqaZM2iVJkiRJqimTdkmSJEmSasqkXZIkSZKkmjJplyRJkiSppv5/NaRFWeEp2VgAAAAASUVORK5C\nYII=\n", "text": [ "" ] } ], "prompt_number": 133 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Here we see the number of methods the class file has." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='methods_count', by='label')\n", "plt.ylabel('Number of Methods')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 134 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Finally, we check out the number of interfaces the class file has." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot(column='interface_count', by='label')\n", "plt.ylabel('Number of Interfaces')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 135 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### First we try classifying binaries just based on some simple features we already have" ] }, { "cell_type": "code", "collapsed": false, "input": [ "my_seed = 1022\n", "my_tsize = .2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 136 }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "clf_simple = sklearn.ensemble.RandomForestClassifier(n_estimators=50)\n", "simple_features = ['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface',\n", " 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count', 'constant_pool_count',\n", " 'entropy', 'size', 'interface_count', 'major version', 'methods_count', 'minor version']\n", "\n", "X = df.as_matrix(simple_features)\n", "y = np.array(df['label'].tolist())\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_simple, X, y, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.927 (+/- 0.044)\n" ] } ], "prompt_number": 137 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Not terribly great, but we're just getting started." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", "clf_simple.fit(X_train, y_train)\n", "y_pred = clf_simple.predict(X_test)\n", "labels = ['benign', 'malicious']\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 93.07% (94/101)\n", "benign/malicious: 6.93% (7/101)\n", "malicious/benign: 10.68% (11/103)\n", "malicious/malicious: 89.32% (92/103)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nnejJuWZmtoqUPNlLvzLQauIriYi3gLdW9blmZrbqlDzZS7/SZzVxSUfkPuV9JH1X0jxJSyVNlzQ6\n5xkj6Y68Fuvzkr7bcI19JV0p6cl87iuSJkvas/iu7yhDYb+2pPUknZLXjX1N0nxJf5D0+S6cu6Wk\nSyW9IGmZpCfytdZqyPeOPvq6Y22SLmpIO0zSjPyMiyXNlXSZpKFdeVYzs4EqIpreWkV/qImfTvoy\ncRZphptvAzdJOho4DzgfuJQ0AvAkSU9FxK/zuYcDGwAXk9Z33Zw0hH+KpL0j4o5mCyNpA+AO0sT2\nV5OWjVuNNIDhAODKDs59PzCDNDn+ucDjwN6kkYqjJY3NNfiajv5SVhyT9EXSM04Dvge8BmwB7A+8\nhzTYwszMCrRQTG5afwjig4DdIuJNAEl/Aq4Dfg2Mioj7c/qFwNPAcfkYwLiIWGn6Oknnk9ZsHU/3\nhvKfSgrgX4qIiQ3X7mwpnFOBocCnIuKmnHa+pKeB75C+dFxYf8kulukzpEXl94mI+tr7D7p4vpnZ\ngNXOaPNK6A8D286rBfCsVnu+uxbAASLiDdL8tB+oS1sRwCWtI2kj0qw5M4BRzRZE0iDgYOBPjQE8\n36/d73P53AOB++sCeM1puVyfabZM2avA2sDfdOGLhJmZ1anywLb+EMSfrP8QEa/kH58qyPsKsFHt\ng6RtJP23pFdINdWXSEvE7U9qZm/W0HzeA9049z2kQPtI44H8TH8BturGdSHV8J8GJgEvSvqNpKPz\nDEBmZtaBMmZs66/6Q3N6eyO8Oxz5nQPYNNKctRNI89UuItV4TyD1RfdnhX8mkt7x3yQinpC0PWkG\noLHAXsAFwA8l7ZmXv1vJrD/8ZMXPm2yxO5u8v2gaXzOz9k1/cQEzXlzQ18WwDvSHIN6sWvAbS5rC\n7siI+FV9BkmndvPa80m1/R27ce5LpC8RH2o8IOndpLLeX5e8IB/bICJerUvfuujiEfE68Lu8IWl/\n4Ebgn4GvNeYf+fFvd+MRzMzeNmrjDRm18YYrPp/zp3fUF1pCKzWPN6s/NKd3V62mvtIzSNoX+Kt2\nzunwP2UeNHYFsL2ko5opTD73BmAnSX/dcPh40iC2a+vSHsv7TzbkfUf0bec1sj/m/bubKaeZ2UAT\nbdH01ipasSZeG9h1B6mf+SeStiStz7ojcCipaf0jHZzbke8C+wAT8xeCO/N5HwVWi4jDOjj3BFJQ\n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\n", "text": [ "" ] } ], "prompt_number": 138 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Here we have the classifier tell use which features were most important and how important they were. The entropy and constant pool count are the two most important features by far." ] }, { "cell_type": "code", "collapsed": false, "input": [ "importances = zip(simple_features, clf_simple.feature_importances_)\n", "importances.sort(key=lambda k:k[1], reverse=True)\n", "for idx, im in enumerate(importances):\n", " print (str(idx+1) + ':').ljust(4), im[0].ljust(20), round(im[1], 5)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1: entropy 0.29813\n", "2: constant_pool_count 0.24814\n", "3: size 0.14489\n", "4: methods_count 0.08492\n", "5: interface_count 0.08152\n", "6: major version 0.05055\n", "7: ap_count 0.02908\n", "8: acc_public 0.02446\n", "9: acc_final 0.01284\n", "10: acc_abstract 0.00982\n", "11: minor version 0.00623\n", "12: acc_super 0.00541\n", "13: acc_interface 0.00275\n", "14: acc_enum 0.00125\n", "15: acc_synthetic 2e-05\n", "16: acc_annotation -0.0\n" ] } ], "prompt_number": 139 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What about the method names?\n", "\n", "#### Next we will explore the names of the methods" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bad = []\n", "good = []\n", "for strings, label in zip(df['method names'], df['label']):\n", " for name in strings:\n", " d = {'method name': name}\n", " if label == 'malicious' and d not in bad:\n", " bad.append(d)\n", " elif label == 'benign' and d not in good:\n", " good.append(d)\n", "\n", "df_method_names_bad = pd.DataFrame.from_records(bad)\n", "df_method_names_good = pd.DataFrame.from_records(good)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 145 }, { "cell_type": "code", "collapsed": false, "input": [ "df_method_names_bad.head(50)" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
method name
0 <init>
1 init
2 ktCgxlqo
3 <clinit>
4 gvuNr
5 eiaxyercdfvbgscpbv
6 yginlmcynkyuohnfhe
7 mtyvzetsjhvnbyz
8 fxxhgjttqfavlooxcb
9 wyjgamzmowywjihkuuf
10 kgthsnqdqutacivcptong
11 qgasjqrogibkblyzourtq
12 glfouhczfxzyskaystx
13 mikczoanebdkwpyb
14 bwssduenvebnvgix
15 wafrcwijizypmitodmb
16 bfznyeevclzzxxqbw
17 jmzisxwtxhekbkl
18 szivddjiptybevduli
19 forwnxmgnutbtdwvptj
20 mwwmrvljafpkwzdiy
21 vvpbdzrhvvnzaieyi
22 qkkxoygluwwlnwbxu
23 dvvwse
24 c
25 k
26 main
27 writeEmbeddedFile
28 bootstrap
29 getJreExecutable
30 addExtension
31 findInDir
32 normalize
33 dissect
34 class$
35 tgznSIAR
36 kWfVWtw
37 BodFzDax
38 xXVBwx
39 VdJiGyZfj
40 taddhnwrkj
41 C
42 ALLATORI_DEMO
43 jvsamhqyvgekftsj
44 knjkb
45 B
46 cmjnkr
47 jmdpes
48 tqffjybms
49 vtvtmh
\n", "

50 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 146, "text": [ " method name\n", "0 \n", "1 init\n", "2 ktCgxlqo\n", "3 \n", "4 gvuNr\n", "5 eiaxyercdfvbgscpbv\n", "6 yginlmcynkyuohnfhe\n", "7 mtyvzetsjhvnbyz\n", "8 fxxhgjttqfavlooxcb\n", "9 wyjgamzmowywjihkuuf\n", "10 kgthsnqdqutacivcptong\n", "11 qgasjqrogibkblyzourtq\n", "12 glfouhczfxzyskaystx\n", "13 mikczoanebdkwpyb\n", "14 bwssduenvebnvgix\n", "15 wafrcwijizypmitodmb\n", "16 bfznyeevclzzxxqbw\n", "17 jmzisxwtxhekbkl\n", "18 szivddjiptybevduli\n", "19 forwnxmgnutbtdwvptj\n", "20 mwwmrvljafpkwzdiy\n", "21 vvpbdzrhvvnzaieyi\n", "22 qkkxoygluwwlnwbxu\n", "23 dvvwse\n", "24 c\n", "25 k\n", "26 main\n", "27 writeEmbeddedFile\n", "28 bootstrap\n", "29 getJreExecutable\n", "30 addExtension\n", "31 findInDir\n", "32 normalize\n", "33 dissect\n", "34 class$\n", "35 tgznSIAR\n", "36 kWfVWtw\n", "37 BodFzDax\n", "38 xXVBwx\n", "39 VdJiGyZfj\n", "40 taddhnwrkj\n", "41 C\n", "42 ALLATORI_DEMO\n", "43 jvsamhqyvgekftsj\n", "44 knjkb\n", "45 B\n", "46 cmjnkr\n", "47 jmdpes\n", "48 tqffjybms\n", "49 vtvtmh\n", "\n", "[50 rows x 1 columns]" ] } ], "prompt_number": 146 }, { "cell_type": "code", "collapsed": false, "input": [ "df_method_names_good.head(50)" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
method name
0 <init>
1 delegate
2 putIfAbsent
3 remove
4 replace
5 resetState
6 comparator
7 createElementSet
8 elementSet
9 descendingMultiset
10 firstEntry
11 lastEntry
12 pollFirstEntry
13 pollLastEntry
14 headMultiset
15 subMultiset
16 tailMultiset
17 invoke
18 hasNext
19 isValidLine
20 next
21 nextLine
22 close
23 closeQuietly
24 exec
25 getInitial
26 getIntermed
27 getFinal
28 max
29 outputSchema
30 estimateLength
31 appendTo
32 getXPath
33 run
34 secToHMS
35 contribute
36 onBeforeRender
37 setCloseEvent
38 setSelectEvent
39 setChangeEvent
40 setSource
41 statement
42 setDocumentLocator
43 startDocument
44 endDocument
45 startPrefixMapping
46 endPrefixMapping
47 startElement
48 endElement
49 characters
\n", "

50 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 147, "text": [ " method name\n", "0 \n", "1 delegate\n", "2 putIfAbsent\n", "3 remove\n", "4 replace\n", "5 resetState\n", "6 comparator\n", "7 createElementSet\n", "8 elementSet\n", "9 descendingMultiset\n", "10 firstEntry\n", "11 lastEntry\n", "12 pollFirstEntry\n", "13 pollLastEntry\n", "14 headMultiset\n", "15 subMultiset\n", "16 tailMultiset\n", "17 invoke\n", "18 hasNext\n", "19 isValidLine\n", "20 next\n", "21 nextLine\n", "22 close\n", "23 closeQuietly\n", "24 exec\n", "25 getInitial\n", "26 getIntermed\n", "27 getFinal\n", "28 max\n", "29 outputSchema\n", "30 estimateLength\n", "31 appendTo\n", "32 getXPath\n", "33 run\n", "34 secToHMS\n", "35 contribute\n", "36 onBeforeRender\n", "37 setCloseEvent\n", "38 setSelectEvent\n", "39 setChangeEvent\n", "40 setSource\n", "41 statement\n", "42 setDocumentLocator\n", "43 startDocument\n", "44 endDocument\n", "45 startPrefixMapping\n", "46 endPrefixMapping\n", "47 startElement\n", "48 endElement\n", "49 characters\n", "\n", "[50 rows x 1 columns]" ] } ], "prompt_number": 147 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### When we look at method names, we see that the benign ones look \"normal\" and while some of the malicioius ones look \"normal\", some look like gibberish. To try to capture that feature, we extract the longest run of consecutive lowercase, uppercase, and digits from the methods name. We also calculate the average run of these sequences as well." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_lowercase_run_longest', 'label')\n", "plt.ylabel('Max length of lower case letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 148, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_lowercase_run_avg', 'label')\n", "plt.ylabel('Avg length of lower case letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nABqENQAAADRsjOURoXDkn70AAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_uppercase_run_longest', 'label')\n", "plt.ylabel('Max length of upper case letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 150, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nffr/tllDswgExQwAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 150 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_uppercase_run_avg', 'label')\n", "plt.ylabel('Avg length of upper case letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA9YAAAE7CAYAAAA4rBnHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYZGWV+PHvIUjWIQsqNqgImEbUNa40CIpZ/JkljIqK\ngK6uqKCsM2Bm0WUVQUUJomBYFdeIAQpBUQQcIwIKDa4gGSSJwJzfH/f2UFRXddXtutVVNfP9PE89\nVe+Np/t5Zt4+dd/zvpGZSJIkSZKkuVll2AFIkiRJkjTOTKwlSZIkSeqDibUkSZIkSX0wsZYkSZIk\nqQ8m1pIkSZIk9cHEWpIkSZKkPphYS5IkSZLUh54T64hYLSLWbtm2fkQcEBEfiIhHVblxRBwUEV+N\niEsiYllEXFrh3DeV5yyLiA2q3FeSJEmSpDpFZvZ2YMRngSdl5iPL9urAUmDb8pA7gCdn5tIer7cM\nuA44H3g8cFNmbtXDeZsDFwABrANsnJnX9/RDSJIkSZJUsypDwZ8GfKup/RKKpHo/4CnA1cBBFa63\nVWZunJnPAq6scN4ngYuBUyiSa0mSJEmShqZKYr0ZcElT+7nAHzLz6Mz8OfAZ4Em9XiwzpyrcG4CI\n2A14PrAPsKzq+ZIkSZIk1a1KYh3Aqk3tSeD0pvaVwKY1xNT+5hH3BY4EPpWZ5w7qPpIkSZIkVVEl\nsZ4CdgWIiKcCm3PvxHpz4KbaIpvpI+V7leHmkiRJkiQN1GoVjj0W+FhE/A54IEVN9alN+/8F+GON\nsS1XJvJvAF6VmTcP4h6SJEmSJM1FlSfWHwcWA/+kmMn7RZl5K0BEbAQ8Gfhu3QFGxH0o6rd/mJlf\nrvv6kiRJkiT1o+cn1pm5DHhf+Wrddy2wcY1xNdsPeDjw7xHx0Kbt65XvW0XEgsxsnliNiOhtHTFJ\nkiRJknqUmTNWp+opsY6I9Sjqpxdn5ozEesC2oHiy/r0O+88BbgHu27qj1zW6Jc2fRYsWcfzxxw87\nDEmSRpr9pTSaItqv+NxTYp2ZN0fEjRR11fPtOODMNtv3p5iZ/DXADfMZkCRJkiRJ06pMXnYasAPw\n6TpuHBF7AA8umxsDq0fEwWV7KjO/AJCZvwF+0+b8F5Qfv5WZ19cRk6TBm5iYGHYIkiSNPPtLabxU\nSazfAZwREYcCh2fm3/u892spEnWA6THbh5bvDeALXc7PpvMkjYnJyclhhyBJ0sizv5TGS9Un1msB\nBwPviYhrgNua9geQmblVLxfLzB0r3Lvd+a+hGAYuSZIkSdLQVEmsL6N4Qty+WrvgE2RJkiRJ0kol\nVtSZsyMiV9SfTZIkSZI0/yKi7XJbqwwjGEmSJEmSVhSVE+uI2CEiPhARx0TENuW2dSPi6RGxfv0h\nSlqRNBqNYYcgSdLIs7+UxkvPiXVErBoRXwFOBw6imNV783L33cApwL61RyhJkiRJ0gjrucY6It5N\nsRzWAcD3gAuAnTPztHL/54CHZ+bTBhRrJdZYS5IkSZLqVEeN9Z7AiZl5BHBdm/1/BB46x/gkSZIk\nSRpLVRLrCeBns+y/EbDGWtKsrBmTJKk7+0tpvFRJrG8GNphl/0OAa/oLR5IkSZKk8VKlxvobFEO9\nH0ORYF9NWWNdzgZ+IXBqZu4xqGCrsMZakiRJklSnOmqsPwBsDZwGPK/ctjAi9gF+BawLfLjfQCVJ\nkiRJGic9J9aZeS7wYmAb4Nhy8+HAUcCawIsy8/e1RyhphWLNmCRJ3dlfSuNltSoHZ+Z3ImIC2AXY\nFgjgIooh4LfVHp0kSZIkSSOuSo31FsC1nRLoiFgb2CgzL68xvjmzxlqSJEmSVKc6aqyngBfNsv8F\nwKUV45IkSZIkaaxVSazn81qSVlDWjEmS1J39pTRe6kyGtwFurPF6kiRJkiSNvFlrrCNiL2CvsjkJ\nXABc1ebQDYFHAt/IzJfUHOOcWGMtSZIkSapTpxrrbrOCrw9s1dTeGFin5ZgEbgE+B7ynnyAlSZIk\nSRo3VWYFXwbskZlfHGxI9fCJtTSaGo0Gk5OTww5DkqSRZn8pjaY6ZgXfEvjGLDdYu1ySS5IkSVIf\nli4ddgSSqqiSWF+Ky21J6pPfvkuS1N2NN04OOwRJFbjcliRJkiRJfeg2eVkVLrclqStrxiRJaq/R\nKF4AhxzSoFiUByYni5ek0TVrYt2y3BbAeyJi7zaHLl9uq8bYJEmSpJVGcwI9NQVLlgwvFknVDHW5\nrYg4CNgeeBwwAVyWmVt2OHZ34HnA44HNgGuBpcAHMvOcKveVNDw+rZYkqbuJiclhhyCpgqEut1Ve\n8zrgfIqE+abM3KrNcWsCtwG/Ar5DMUna5sA+5fuerXG53JYkSZLGVaPh8G9pFHVabqvnGuvMHMTk\nZFtl5hRARPwOWLvDcXcCO2Tmmc0bI+IY4PfARyPiJDNpafRZYy1JUi8aTNdYSxp9lZPliNgyIl4f\nEe+JiC3LbfeJiC0iYo0q15pOqns47u7WpLrcfjXwE2ATimHqkiRJkiTNq56HggNExGHAv1Mk5Ans\nkpmnRcT9gCuAgzPzv+YUSPnEut1Q8C7n/QJ4NHC/zPxn03YfYEuSJEmSatNpKHjPT6wj4o3AAcCR\nwDOB5RfLzJuAb1JMLjZvIuI5wBOALzcn1ZIkSZIkzZcqQ8H3BU7JzLdSzMbd6rcUa1nPi4h4GHAi\n8H/A2+frvpL605heoFOSJHVkfymNl54nLwO2Bo6eZf81wEb9hdObsrb7x8DdwLMz87p2xy1atIiJ\niQkAFixYwMKFC5dPmjT9n5Vt27Zt27Zt27Zt27Zt27bdrj39eWpqitlUWW7rBuD9mfnRiNgIuBrY\nOTNPK/cfCrwxMzft6YIzr99TjXVETAANYF3gGZn56w7HWWMtSZIkSapN3zXWwC+B3TpcfE1gD+Cn\ncwuvN01J9XoUE6e1TaolSZIkSZovVRLrw4CnRMQXKGbhBtgsInYFzgAeBBxec3zLRcSDgdOB+wLP\nzMxfDepekganeViNJElqz/5SGi8911hn5o8iYh/g48Crys0nlu93AHtn5s+q3Dwi9gAeXDY3BlaP\niIPL9lRmfqE8bj2KpPrBwCeAbSNi25bL/aBc11qSJEmSpHlTaR1rgIjYDHgJsC3FklsXAV/JzL9W\nvnnE6cAOZXM6kOnx6o3M3Kk8bgK4pDxmxnj2cvuOmfmTpmtbYy1JkiRJqk2nGuvKifW4MLGWJEmS\nJNWpjsnLJKlv1oxJktSd/aU0XjrWWEfEcdwzPLtnmfnaviKSJEmSJGmMdBwKHhHL5nLBzByJp+AO\nBZckSZIk1anTUPCOT6xHJUGWJEmSJGmUmTxLmlfWjEmS1J39pTReTKwlSZIkSeqDy21JkiRJktQD\nl9uSJEmSJGkATKwlzStrxiRJ6s7+UhovJtaSJEmSJPXBGmtJkiRJknpQeR3rWS60JbAzsAlwUmZe\nGhH3Ae4PXJWZd/QdrSRJkiRJY6LSUPCIOAy4GPg0cCiwZblrLeACYN9ao5O0wrFmTJKk7uwvpfHS\nc2IdEW8EDgCOBJ4JLH/8nZk3Ad8Enld3gJIkSZIkjbKea6wj4tfAnzPzxRGxEXA1sHNmnlbuPwjY\nPzMfMLBoK7DGWpIkSZJUpzrWsd4a+MEs+68BNqoamCRJkiRJ46xKYv0PYJ1Z9m8B3NhfOJJWdNaM\nSZLUnf2lNF6qJNa/BHZrtyMi1gT2AH5aR1CSJEmSJI2LKjXWO1MMBT8JOBb4EUUyfR1wCPA44OmZ\n+bPBhFqNNdaSJEmSpDp1qrHuObEuL/IG4OPAfVp23QG8KTOP7yfIOplYS5IkSZLqVMfkZWTmZyjW\nrv434FMU61m/HXjoKCXVkkaXNWOSJHVnfymNl9WqnpCZVwKfGEAskiRJkiSNnUpDwWecHLE68EJg\nfeBbmfm3ugLrl0PBJUmSJEl16rvGOiIOA3bMzCeU7QAawL+Wh1wPPDEz/1xLxH0ysZYkSZIk1amO\nGutdgbOa2s+nSKoPA15VbjtozhFKWilYMyZJUnf2l9J4qZJYPwi4qKn9fGAqMw/MzC8BRwM7Vbl5\nRBwUEV+NiEsiYllEXNrl+IdHxCkRcX1E3BIRP4mIHavcU5IkSZKkOlWZvOw+wF1N7R0p1rKedimw\necX7f4BiHezzgfsBHcduR8RDgJ8B/wQ+AvwdeD1wakQ8OzN/XPHekoZgcnJy2CFIkjTy7C+l8VLl\nifX/AU8BiIhHAFsBZzTt3wS4peL9t8rMjTPzWcCVXY79EHBf4FmZ+ZHMPJpiKPoVwCcr3leSJEmS\npFpUSaxPBvaKiG8D3wFuBr7btH8hUGnissyc6uW4iFgHeAHQyMzfNJ1/K/BZYOuIeEKVe0saDmvG\nJEnqzv5SGi9VEusPA8dRPLVeBuyRmTcARMQCimW3BjUc+9EUQ9HPbrPvF+X74wd0b0mSJEmSOuq5\nxjoz/wG8rny1+juwGXBrTXG1mq7d/mubfdPbHjCge0uqkTVjkiR1Z38pjZcqk5d1lJnLgBvruFYH\na5fvd7TZ94+WYyRJkiRJmjeVE+uIuD/wOGB92gwlz8zP1xBXq9vK9zXa7Fuz5ZjlFi1axMTEBAAL\nFixg4cKFy7/9m65bsW3b9vy2m2vGRiEe27Zt27ZtexTb059HJR7btlfW9vTnqakpZhOZHVe4uveB\nEasARwF7M0ttdmZ23Nfl+r8D1s7MrdrsezLwU+D9mfneln27AKcC+5UzhU9vz15/Nknzp9FoLP8P\nS5IktWd/KY2miCAzo3V7lST4AOANwEnAnuW2dwH7AhcD5wI79xlnJ7+lGAb+lDb7nlS+nzuge0uq\nkX8kSJLUnf2lNF6qJNZ7Aadm5p7A98tt52Xmp4DtgQ0Z0MzcmXkL8C1gMiIePb09ItaleIJ+UWb+\nchD3liRJkiRpNlUS662A75Wfl5Xvq8Py9aSPo/2M4R1FxB4RcXBEHAxsDCyYbkfE7i2HHwTcBPwg\nIt4VEfsCZ1LMRv7mKveVNDzN9SqSJKk9+0tpvFSZvOx24M7y8y1AAps07b8K2KLi/V8L7FB+ni6I\nPrR8bwBfmD4wM/8cEU+lWE/7QIp1rc8Dds3M0yreV5IkSZKkWlSZvGwp8KPMPKBsXwScm5mvKttf\nAp6UmRMDirUSJy+TJEmSJNWpjsnLfgy8uKn9eeAVEXF6RJwBvAz4Sn9hSpIkSZI0Xqok1h8F9o2I\n6XWjPwwcCSwEtgM+DSyuNzxJKxprxiRJ6s7+UhovPddYZ+YVwBVN7buAt5QvSZIkSZJWSj3XWI8b\na6wlSZIkSXXqu8Y6IvaLiB9FxIyLROGHEbFPv4FKkiRJkjROqtRYLwL+1O4xcLntIuA1NcUlaQVl\nzZgkSd3ZX0rjpUpi/TDgN7Ps/z2wdX/hSJIkSZI0Xqok1qsDa86yf80u+yWJycnJYYcgSdLIs7+U\nxkuVxPpiYJdZ9u8C/Lm/cCRJkiRJGi9VEuuTgGdFxPsj4j7TGyPiPhFxKPCs8hhJ6siaMUmSurO/\nlMZLz+tYA0cAzwbeDewTEX8st28LrA+cCXy03vAkSZIkSRptldaxLp9UvxV4NcVkZgAXAl8E/jsz\n76w9wjlyHWtJkiRJUp06rWNdKbEeJybWkiRJkqQ6dUqsq9RYS1LfrBmTJKk7+0tpvJhYS5IkSZLU\nB4eCS5IkSZLUA4eCS5IkSZI0ACbWkuaVNWOSJHVnfymNl54S64hYNSK2iIgNBx2QJEmSJEnjpKca\n64hYC7gFODAz/3PgUdXAGmtJkiRJUp36qrHOzNuBa4Fb6w5MkiRJkqRxVqXG+jvA8wYViKSVgzVj\nkiR1Z38pjZcqifU7gc0i4vMR8eiIWHNQQUmSJEmSNC56Xsc6IpbNsjuBADIzV60jsH5ZYy1JkiRJ\nqlOnGuvVKlzj8z0cM7BMNiI2Av4d2A14EHA7cBHwmcw8YVD3lSRJkiRpNj0/sR6miFgD+BWwNXA8\n8HNgHeCVwL8Ah2XmgS3n+MRaGkGNRoPJyclhhyFJ0kizv5RGUx1PrIfpX4FtgP/KzLdPb4yIo4A/\nAm8EDuxwriRJkiRJA1Nl8jIiYrWI2CsivhgRP4yIx5bb14+IPSPiAYMJk9vK9yubN2bmncB1FGts\nSxoDfvsuSVJ39pfSeOn5iXVErA38EHgyRaK7NrB+uftm4MPAccB7ao6RzPxZRHwPeGdETAHnlPff\nC9ie4om1JEmSJEnzrsoT6yXA44AXA1s278jMu4BvAM+sLbKZXgB8HfgKMAX8AdgXeHFmfm6A95VU\nI9fllCSpO/tLabxUSaxfChyTmafQfvbvP9GScNclIlYH/gdYBBxOMTP43uU9T46InQdxX0mSJEmS\nuqkyednmwNJZ9t8GrNdfOB29AXghsE9mfmZ6Y0ScDPwOOCYiHpKZs621LWkEWDMmSVJ39pfSeKmS\nWF8PzDY52XbAFf2F09HOFE/Jv9q8MTNvj4jvAvsBDwYubd6/aNEiJiYmAFiwYAELFy5c/p/U9PAa\n27Zt27Zt27Zt27Zt27Ztu117+vPU1BSz6Xkd64g4EXga8EhgLeBqYOfMPC0itgR+A3whM9/U0wUr\niIhvA88BNs3Ma1r2HU0xednDM/Pipu2uYy2NoEajsfw/LEmS1J79pTSaOq1jvUqFaxwKbAD8EphO\nnneNiA8DvwL+CXyo30A7OKd8X9S8MSIWUAwRv56i3lqSJEmSpHnV8xNrgIh4HHAs8KiWXb8D9sjM\nX9cYW/N9NwTOBx4IfBH4GUWS/3pgC2C/zPxUyzk+sZYkSZIk1abTE+tKiXXTxR4FbAsEcHFmnt9/\niF3vuRmwGHg2sBlwO8WT8iPKmcpbjzexliRJkiTVptbEehyYWEujyZoxSZK6s7+URlOnxLrKrODT\nF3oA8HzuWbP6EuDbmfnX/kKUJEmSJGn8VK2xfi9wMDMT8ruAD2bmkvpC649PrCVJkiRJdep7VvCI\n2B9YQlHX/CrgseXr1cBS4L0R8eZaopUkSZIkaUxUWcf6QuBG4GmZeWfLvvsAZwH3y8yH1x7lHPjE\nWhpN1oxJktSd/aU0mupYx3oL4KTWpBogM/8JnAQ8eO4hSpIkSZI0fqok1n8B1ptl/7rA5f2FI2lF\n57fvkiR1Z38pjZcqifUngH0iYvPWHeVM4fuUx0iSJEmStNKostzW34G/ARdExBeBC8rt21FMYHYR\ncFNE7Nl8UmZ+vo5AJa0YrBmTJKk7+0tpvFRJrI9r+rxPm/3bA8e3bEvAxFqSJEmStMKqMiv45Fxu\nkJmNuZzXL2cFlyRJkiTVqdOs4D0n1uPGxFqSJEnjqtEAR4JLo6eO5bZaL7hWRKzVX1iSVjaNRmPY\nIUiSNPKOP74x7BAkVVApsY6ITSPi6Ii4ErgVuCUiriy3bTqYECVJkiRJGl1Vaqy3BH4K3J9iBvDp\nWcG3BbammDH8aZl5yQDirMyh4JIkSRonjUbxAjjkEFi8uPg8OemwcGlUdBoKXmVW8I8CGwAvzsxT\nWi6+G/Cl8pjd+glUkiRJWhm1JtBLlgwpEEmVVRkK/gzgqNakGiAzvwEcBexUV2CSVkzWWEuS1N3U\nVGPYIUiqoEpinRRDwDu5uM9YJEmSJAHrrjvsCCRVUSWxPgPYcZb9OwCn9xeOpBXdpEVikiR1tdFG\nk8MOQVIFVRLrtwJPioiPRcQm0xvLmcL/C3hSeYwkSZIkSSuNKrOCXwqsA2xEMSz8xnLX+uX7tcAt\nzacAmZlb1RNqNc4KLo2mRqPhU2tJktq496zgDRYvngScFVwaJXXMCn4ZRUI94yKzMLOVJEmSetCc\nQE9NOSu4NE56Tqwzc3KAcUhaSfi0WpKk7iYmJocdgqQKqtRYS5IkSZoHfg8tjRcTa0nzynWsJUnq\nRWPYAUiqoOeh4BGxjJk11s011NOTla1aU2ySJEmSJI28KrOCH99m82rAVhRLbf0aWJqZr6ktupkx\nbAC8G3gR8ADgZuB3wHsz86yWY50VXJIkSZJUm75nBc/MRbNc/CnA/wJvmlN0PYiIB1OMiVkb+Bxw\nEbAAeBSw+aDuK0mSJEnSbHp+Yt31QhGHA0/IzB1queDM658JbAH8S2Ze1cPxPrGWRpDrWEuS1J39\npTSaOj2xrnPysouBx9d4veUi4unAU4HDMvOqiFg9ItYexL0kSZIkSaqizsR6B+D2Gq/X7Dnl+18i\n4lvAbcAtEXFhRLx6QPeUNAB++y5JUi8mhx2ApAqqzAq+F/eeBXzaBsAuwLMpap8H4eHl+zEUtdV7\nAmsAbwdOjIjVM/P4Ad1bkiRJmleNhmtZS+Ok58QaOG6WfXcBnwXe1l84Ha1Xvv8d2DEz7wKIiFOA\nS4APRsQJFlVLo8+aMUmSupuaauBTa2l8VEmsd2qzLYHrgUsz85Z6Qmpreoj5ydNJNUBm3lgODd8D\n2Bq4sPmkRYsWMTExAcCCBQtYuHDh8j/oG40GgG3btm3btm3btm3bI9E+4ogGS5fCxMQkJ5wAUOxf\ntGiSycnhx2fb9srYnv48NTXFbGqbFXyQIuJo4I3A/pl5VMu+DwPvBJ6SmT9v2u4DbEmSJI2lJUuK\nl6TRMh+zgg/SL8r3B7XZ98Dy/ep5ikWSJEmSpOXGJbE+BbgZ2D0i1pneGBGbAS8CLszMS4YVnKTe\nNQ+rkSRJ7S1Y0Bh2CJIqqFJjPTRlLfUBwKeBn0fEsRSzgr+J4md48zDjkyRJkuq0cOGwI5BUxVjU\nWE+LiN0o6qkfBSwDfgYckplntznWGmtJkiRJUm061ViPVWJdhYm1JEmSJKlOlScvi4hLI+IFTe3F\nEfHIQQUoaeVgjbUkSd3ZX0rjZbbJyx4ErNfUXgw8erDhSJIkSZI0XjoOBY+Iy4GTM/NdZXsZsHtm\nnjSP8c2ZQ8ElSZIkSXWqXGMdER8H9gd+A9wA7ABcAFw1240yc6e+o62BibUkSZIkqU6Va6yBA4H3\nAbcBDy63bQxsNctryxpjlrQCsmZMkqTu7C+l8dJxHevMvI2irnoxLB8K/rbM/OI8xSZJkiRJ0sjr\nebmtiFgEnJGZlw40opo4FFySJEmSVKda17GOiI2AibJ5aWZe11949TOxliRJ0rhqNGBycthRSGo1\nlxrrdhdZGBE/Aa4GzilfV0fEGRHxmHpClbQis2ZMkqTujj++MewQJFXQsca6VUQ8EjgTWBM4BfhD\nuWs74AXAmRHx5Mz8fe1RSpIkSZI0oqrUWH8d2BHYITN/07JvOuk+PTNfXHuUc+BQcEmSJI2TRqN4\nARxyCCxeXHyenHRYuDQqOg0F7/mJNfB04JOtSTVAZv4uIj4J7NNHjJIkSdJKqzWBXrJkSIFIqqxK\njfU6wJWz7P8bsG5/4Uha0VljLUlSd1NTjWGHIKmCKon1pcDzZ9n/XOCS/sKRJEmStHDhsCOQVEWV\nGut3AR8Cvgx8ALig3LUdcBDwCuDAzDxsAHFWZo21JEmSJKlOfa9jHRGrAV8EXlpuurt8X7V8/wrw\n6sy8u/XcYTCxliRJkiTVqe91rDPzrsx8OfAs4FPAj8rX0cAzM/MVo5JUSxpd1lhLktSd/aU0XqrM\nCg5AZv4Q+OEAYpEkSZIkaez0PBR83DgUXJIkSZJUp76HgkuSJEmSpJlMrCXNK2vGJEnqzv5SGi8m\n1pIkSZIk9cHEWtK8mpycHHYIkiSNgclhByCpAhNrSZIkacQ4ElwaL2ObWEfE2hFxSUQsi4hPDDse\nSb2xZkySpO6mphrDDkFSBZXWsY6IVwJvBh4GbNi0K4EAMjNXrS+8WR0KbNR0f0mSJGlsNRr3PKk+\n4QSYmCg+T04WL0mjq+fEOiLeAXwEuBb4OXBdm8PmJcGNiO2BfwPeAXxsPu4pqR7WWEuS1N69E+hJ\nliwZWiiSKqryxHo/4BfATpl5+4Di6SoiVgWOAb4HfAMTa0mSJEnSEFWpsb4/cOIwk+rS24CHA/tT\nDD+XNEassZYkqbsFCxrDDkFSBVUS6z8DCwYVSC8iYkvgEOCQzLx8mLFIkiRJg3LGGcOOQFIVVRLr\nw4G9I2K9QQXTg08Bf8Lh39LYssZakqTufvWryWGHIKmCjjXWEbEX956MbBlwFXBBRBwHXALc3Xpe\nZn6+7iDLeHYHdgb+NTNn3FeSJEmSpGGYbfKy42bZ954O2xOoPbGOiDUonlJ/B7gqIh5a7npA+b4g\nIh4CXJuZN02ft2jRIibKdQoWLFjAwoULlz8tm67ztG3b9vy2m2usRyEe27Zt27Zte1Tau+3W4Oyz\nYc01J7nssgb3vz8AvOQlkxx55PDjs217ZWxPf56ammI2kdl+hayImJz1zA4ys9H1oIoiYgFwfQ+H\nHpCZHyvPyU4/m6ThaTQay//DkiRJ7d3//g3+9rfJYYchqUVEkJkzJtHumFiPkohYDXghM9fJ3gQ4\nimLprc8Bv83Mi8tzTKwlSZI0liYmoMsDMklD0Cmx7nkd64g4HXh/Zv64w/4dgf/IzJ3mHmZ7mXkX\n8LU295woP/45M79e930lSZKkYXje84YdgaQqVqlw7A7AprPs3xSY7CsaSSu85noVSZLU3kte0hh2\nCJIq6PmJdQ/uB9xR4/W6yswpqn05IEmSJElSrWZNrCPiMcBjgOkx5P9a1ju32hDYF/hDveFJWtE4\ncZkkSb2YHHYAkiro9sR6N+C9Te03lq92bgbeUkdQkiRJ0sqs0QC/i5bGR7fE+nigUX4+Dfgg8KOW\nYxK4Bfh9Zv6jzuAkrXhcbkuSpO6mphr41FoaH7Mm1mUN8xRARLwWOCMzLx18WJIkSdLKpdEoXgAn\nnFAsuQXFk2u/k5ZG21isYz0XrmMtSZKkcbVkSfGSNFrqWMd6McWw704SuB24HGhk5tWVo5QkSZIk\nacxUWW5rcYVj74yIj2bmu6sGJGnFZo21JEndLVjQwBpraXxUWQP6kcB5wM+AlwOPLV+vAM4u9z0Z\neClwLnBgROxTa7SSJEnSSmDhwmFHIKmKnmusI+II4PHAZGbe1bJvdYrZw8/LzLeU7XOBuzNz+3pD\n7o011pIkSZKkOnWqsa7yxPrlwFdak2qAzLwT+ArF0+rp9peBbeYWriRJkiRJ46FKYn2/8tXJfYEF\nTe3rmH1gZSqaAAAS4UlEQVSyM0kroSOOaAw7BEmSRt7++zeGHYKkCqok1r8G3hQRE607ImJLYF9g\nadPmrYEr+wlO0opn6dLux0iStLI766xhRyCpiiqzgh8I/AD4Q0R8E7iw3L4N8EKKJP1VABGxJrA7\n8O36QpW0IpiYmBx2CJIkjbwFCyaHHYKkCnpOrDPzjIh4BvAxinrrZucCB2TmT8pj/xERDwb+WVuk\nksZWo1G8AA455J7tk5PFS5IkwRFHwCmnFJ/POOOePvJFL4K3vnVoYUnqQc+zgt/rpIhNgS3L5lRm\n/q3WqGrgrODSaFq0qMHxx08OOwxJkkbawoUNli6dHHYYklp0mhW8ylDw5TLzKuCqvqOSJEmSNMM1\n1ww7AklVVE6sI2JtYALYEJiRqU8PB5ekdhYtmhx2CJIkjYHJYQcgqYKeE+uIWIeivvo1s5yXwKo1\nxCVpBWVNtSRJ3a2++rAjkFRFlSfWRwCvA74LnE6xTrUkVdJoNJg0u5YkaYbmycsuu+ye/tLJy6TR\nVyWx3g34Uma+alDBSJIkSSurhQvhxhuLz82zgi9cOLSQJPWo51nBI+IW4G2ZecxgQ6qHs4JLkiRp\nXE1MwNTUsKOQ1KrTrOCrVLjGecDD6gtJkiRJUjvbbDPsCCRVUSWxPhB4bUQ8YVDBSFrxNRqNYYcg\nSdLI23XXxrBDkFRBlRrrNwB/Ac6OiLOBS4C7Ww/KzNfWFJskSZI0diJmjBKdk7e9rZbLYHmkNHhV\naqyX9XJcZlZ5Cj4w1lhLkiRpXEWAf8pKo6dTjXXPT6yHnTBHxNbA7sAzga2ANYE/A18FjsjM24YY\nniRJkiRpJTUST5d79FrgrcDFwCHAAcCFwPuBn0XEmkOMTVKPrLGWJKkXjWEHIKmCKjXWAETEusCT\ngU2AH2fm32qPqr2vAh/IzJubtn0mIi4G3gO8DvjkPMUirXTqqheri6UekiRJGhWVnlhHxL7AX4FT\ngc8D25XbN42IOyLiDfWHWMjM81qS6mlfKd8fMah7SyoS2TpeixfXcx1JklZkixdPDjsESRX0nFhH\nxP8DjgROA/YGlj++ysyrgO8BL6w7wB48sHy/agj3llTRkiXDjkCSpNFnfymNlypPrN8BNDJzN+B/\n2+w/D3hkLVH1KCJWBf4DuBM4aT7vLWlurLGWJKk7+0tpvFRJrB8FfH2W/VcCm/YXTmVHAE8C3puZ\nF8/zvSVJkiRJqjR52d3MnohvBtzaXzi9i4j3AfsBn87Mj7Q7ZtGiRUxMTACwYMECFi5cyOTkJHDP\nt4C2bdue3/bk5ORIxWPbtm3btm2PYnvS/tK27ZFoT3+emppiNtHrJEARcRZwU2Y+NyI2Aq4Gds7M\n0yJiFWApcEVm7trTBfsQEUuA9wLHZubeHY5JJziSJEmSJNUlIsjMGcvlrFLhGp8Anh0R7wc2KLet\nGhHbAP9DUV/98b4j7aIpqT6+U1ItaXQtWtQYdgiSJI08+0tpvPT8xBqgTKrfDSTFrODT7wBLMvPQ\n2iO89/3fCywBPp+Zi7oc6xNraQRFNMicHHYYkiSNNPtLaTR1emJdKbEuL7Q98GpgW4qk+iLgxMw8\nt45AZ7nvfhRPzS+nmAm8NfC/ZeaPmo43sZZGUAT4T1OSpNnZX0qjqbbEelgi4jhgz+lmm0MamblT\n0/Em1tII8g8FSZK6s7+URtPYJ9ZVmVhLo8mhbZIkdWd/KY2mTol1x+W2ImIxM4dbdzXoOmtJkiRJ\nkkbJbOtYL57jNU2sJXW0ePHksEOQJGnk2V9K46XjUPCImJjLBTNzau7h1Meh4JIkSZKkOlljLWkk\nNBoNJicnhx2GJEkjzf5SGk2dEutVhhGMJEmSJEkrCp9YS5IkSZLUA59YS5IkSZI0ACbWkubVokWN\nYYcgSdLIs7+UxotDwSXNq4gGmZPDDkOSpJFmfymNJmcFlzQSIsB/mpIkzc7+UhpN1lhLkiRJkjQA\nq/V6YEScDsz2vVkCtwOXAz8ETvGRsaSZGsDkkGOQJGnUNbC/lMZHz4k1sCWwNrBR2b6pfL9f+X4t\nxRPw5wD7AD+NiF0z89Y6ApUkSZIkaRT1XGMdERPA6cBXgMMz85py+ybAAcDLgJ0oEu4DgbeXx72z\n9qh7i9cH5tK0mFEGIrB4TZI0k31me/aZElDD5GURcQpwa2a+usP+k4B1MvOFZftbwLaZ+dC5hz13\nJtbSPZwAZSZ/J5KkduwfZvJ3It2jjsnLdgR+Msv+M7l3IciPgQdVuL6klUCj0Rh2CJIkjTz7S2m8\nVEmsA9h2lv0PL4+ZtoxiMjNJkiRJklZYVYaCfw14LvCazDy5aXsArwSOA76dmf+v3H4c8NjMXFh7\n1L3F61BwqeQQrpn8nUiS2rF/mMnfiXSPOmqsJyiGez8AuAL4U7nrYcBm5banZeZURKwFfBf4VmZ+\nrO/o58DEWrqHHeJM/k4kSe3YP8zk70S6R9811pk5BSwEDgduBp5Uvm4utz2mPIbMvD0zdxxWUi1p\ndFkzJklSd/aX0nipso41mXkd8M7yJUmSJEnSSq/KUPAXAN/JzLsHG1I9HAou3cMhXDP5O5EktWP/\nMJO/E+kedSy3dQpwRUQcERGPrS80SZIkSZLGV5XE+k0UE5a9BTgvIn4TEQdExP0HE5qkFZE1Y5Ik\ndWd/KY2XKpOXfTozn0oxC/j7gHWAw4C/RMR3I+LlEbHGgOIkIlaJiLdFxB8j4vaIuDwiDo+ItQd1\nT0mSJEmSuum5xnrGicX61U8D9gReCtwXuCkz168vvHvd77+BNwNfB74HbFe2zwR2bi2otsZauoe1\nUTP5O5EktWP/MJO/E+kefa9jPcuF1wF2p3h6vV5mVhle3us9HgH8FvhaZr60afv+wMeBV2fmyS3n\nmFhLJTvEmfydSJLasX+Yyd+JdI86Ji9rvlhExC4RcSJwFXA08E/gyP7C7OiV5fsRLduPAW6jSOwl\njQFrxiRJ6s7+UhovlRLriNguIj4C/AU4FXgZ8EPgxcDmmfmW+kME4AnA3cA5zRsz8w7g1+V+SWNg\n6dKlww5BkqSRZ38pjZfVej0wIs4DppfZOg/4MHByZl43iMBabA5cm5l3ttn3V+DJEbFaZt41D7FI\n6sONN9447BAkSRp59pfSeOk5sQY2A/4TOCEz/9DugIhYo3yKXLe1gU7X/UfTMX8fwL0lSZIkSeqo\nSmL9oMy8u92OiHg88Drg5cAGdQTW4jZgow771gSyPEbSiJuamhp2CJIkjTz7S2m89LPc1oYUk4a9\nFnhUufmizNymptia73UqsBOwdutw8Ij4KfDQzNy0ZbtzF0qSJEmSatVuVvAqT6yn165+FkUy/QLg\nPsCFwBKKpbB+33+YbZ0D7AI8ETirKZ41gYVAo/WEdj+sJEmSJEl162lW8IjYMiLeB1wGfBfYEfha\nufvgzDx0gEk1wJcphnu/tWX764G1gC8O8N6SJEmSJHU06xPriJge6r1Duek04B3AN4AtKNaXHviQ\n68z8XUR8Etg/Ir4GfA/YFngz0MjMkwYdgyRJkiRJ7XR7Yv15ijWiPwg8JDN3ycwvZ+Y/Bx/aDG8F\nDgAeARxJsYb2x4HnDSEWaexFxKKIWBYRTx9iDJNlDHsNKwZJkgYtIo6PiGUt25aUfeAWc7jenM+V\nNBjdaqzvANahqKe+JiJOzMwbBh/WTJm5DPhY+ZK04kjmYeSLJElD1trX9dP/2XdKI6bbE+vNgbcA\ny4AjgCsi4uSI2BlwcjBJ/TqDYp6ELww7EEmSBqz1b+f3A2tl5uVzuFY/50oagFkT68y8ITOPzMzH\nAo8HjgV2BX4A/LQ8bMFgQ5S0osrCP8sRKZIkrTQy8+65llf2c66kwehpVnCAzDw/M/cDNqNYv/q3\n5a7PRsTSiPiPiHjEIIKUNFCrl7Val0XEPyLi1xHx8taDIuLxEfGNiLimPO6PEfHuiFi15bhGRFwa\nEZuVI1yuj4hbI+L7EfGwlmPb1lhHxIYRcWxEXBcRN0fEjyNi4fS1W46diojTI2KbiPhORPw9Im6M\niK9GxL3Wt5ckCe41z8hOEXFw2ZfcFhG/iIinlsdMRsRZEXFLRFwREQe3XOOZEfHliLikPPeGiDi1\n17lLOtVJR8R9I+IDEXFBRNweEddGxJnNffMs505ExIkRcVXZV/+pvNZaLcfNqPlu2rcsIo5r2bZn\nRJxT/oy3RMSfI+ILEbFRLz+rtDKotI41QGb+AzgJOCkitgReAywCDqFYz3rVjidLGkUfAdammBQw\nKP5NnxwRa2bmCQAR8Vzg68BFwOHA9cBTgEMp1pJ/WdP1kmJuhp8AZwMHAVsB/wZ8MyIe2eYJ9fI6\nsYhYA/gR8BjgOIp17B9Tbrue9jVqDwBOL2P8ZhnTG4H7As+aw+9EkrRy+DDFg6YjgDWAtwPfj4jX\nAUcDnwJOBF4OHBoRl2bm9DKve1GM3Dwe+D/ggcDewI8jYsfMPKtqMBGxADgL2A74KvBJir+ttwee\nS7EEbadzH0zRZ64HHAVcTLFE7kHAUyPiGZl5d9Mps9VoN/fLe1D8jD8B/gO4nWJ1oGcDGwPXVvkZ\npRVV5cS6WWZeCrw3IpYAzwReV0dQkubVhsCjM/NmgIj4FPAb4GMR8SWKZPtzFEnyTk1J8TER8evy\nuB0y84xyewAbAYdl5uHTN4mIa4DDgJ0pykk6eR1FIv2ezPxQ0/m/pfgDY6rl+AAeCrwsM/+n6fhl\nwL4RsXVmXtTzb0OStDJZBXhSZt4FEBF/oPiC9ovAEzPz/HL7scBlwH7lPoDXZ+ZtzRcr+9DfUySz\nz51DPB+kSKrfkJmfbbl2t/mNPkjR/z4nM79fbvtURFxGsbLOXhRlncsv2WNMuwF/595/AwAs7vF8\naaXQ81Dw2WTmssz8fma+tI7rSZpXR08n1QCZ+XeKb+jXp/imexdgE4pvqzeIiI2mXxRrykPxxVqz\nuymWw2t2evn+0C7xPB+4C/jvlu2fpejY2/lrc1Jd8X6SpJXX0dNJdWn6KfPZ00k1QGbeCfwSeFjT\ntuVJdUSsGxEbUkz4ew7wxKqBRMQqwCuAP7Qm1eX9Oj5hLs99AXB+U1I97UNlXLtVjal0I8VItOf1\nkNxLK62+nlhLWiFcMMu2rYB1y8/HtjkOiuFim7Rsu6LNpCrXle8bdolny/L8ez0FyMw7y/rq+7U5\n55I223q9nyRp5XWv/iMzbyhzx0vbHHsDTX1KRDwE+ABFyVFr3zSXSTk3ohha/t05nLsxRfL7+9Yd\n5c/0N4r+dS4+CDwdOAW4LiLOoPhi/cuZecscrymtcEysJc2m+dvxA4ClHY67oqV9d9ujCoP4tnu+\n7ydJWjF06j9m61eIiHUpao7XAv6LYlLfmykS6ndTjPgaZW2ffkfEjNwgM/8UEdsBzyhfOwDHAIdE\nxNMzs92X29JKx8Ra0nbAt9psg+Kb/LXLz7dl5mnzEM8U8IyIWCczb53eGBGrU3zbfv08xCBJUjvT\nCekzKFbKec30RJ/TIuKDc7z2tRRPxRfO4dxrKBL7GSv0RMT6FLGe37T5+nLfgsy8sWn7Vu0uXo5C\n+175IiKeDXwH+Hdg/znEK61waqmxljTW3hQR951uRMT9gH0oOvczgFOBq4EDy875XiJirfKb+7r8\nL8UMqP/Wsv31FLN8S5I0bNNPtO/1t3REPBP4lw7nzDYLN+XEYCcD20XEa6sEU577LWD7iGhdDeNA\nitFb32jadmH5vkvLsW9vvXaHJbV+Vb7P+LtAWln5xFrSNcAvyjUrp5fbeiCwd7m8HhGxJ0Vt1YXl\nzKh/pqgD24ZiMpQXUQyJm9bP8OvPUiyV9f6IeCjFZDGPpljS60+4pJ8kaXim+7ezgL8BH42ICeCv\nFE+ad6cYFv6oWc6dzcHATsBnyyT9p+V5jwVWzcw9Zzn33RSJ8ikRcRRFX/10iv7zDKD5yfrJFLXT\nn4mIbSi+TN+V9vOS/CAibqD4mf9C0f8vohj2fmIPP5O0UjCxllZuCbyLouPdD9iU4lvsV2fml5Yf\nlPmDiHgCxbfeu1NMknIDRaL7UYo/IpqvOeu38m1iuKeR+c+IeAbwn8ALKf4gOIdima5jgDVnO7/C\nPknSyq1qH7G8f8vMG8snw4cBb6b4m/pcirWd9wYe2enc2baV130yRZL8Yoovr2+mmJTsE13OvTwi\nnggcStFXL6BIhD8IvL95qazMvDkingN8rLzXLcDXgFdT9O/NjqLoi98AbEAxOej5wH5NS21KK72Y\nZeZ+SRoZEbEqRf3Z2Zn5nGHHI0mSJE2zxlrSyImI1qfSUNR93w/44TyHI0mSJM3KJ9aSRk5EfAFY\nAzgbuAN4MvBKiqHn2zfPFi5JkiQNm4m1pJETEXtQ1HxvDaxLMUHMd4H/yMxrhhmbJEmS1MrEWpIk\nSZKkPlhjLUmSJElSH0ysJUmSJEnqg4m1JEmSJEl9MLGWJEmSJKkPJtaSJEmSJPXBxFqSJEmSpD78\nf0P4KMDBpCcOAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_digit_run_longest', 'label')\n", "plt.ylabel('Max length of digits')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 152, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('method_name_digit_run_avg', 'label')\n", "plt.ylabel('Avg length of digits')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 153, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nkiRJkjQi/x+ZfJFpVZbMdgAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 153 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We train the classifier using these new features." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "clf_methods = sklearn.ensemble.RandomForestClassifier(n_estimators=50)\n", "method_name_features = ['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface',\n", " 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count', 'constant_pool_count',\n", " 'entropy', 'size', 'interface_count', 'major version', 'methods_count',\n", " 'minor version',\n", " 'method_name_digit_run_avg', 'method_name_digit_run_longest',\n", " 'method_name_lowercase_run_avg', 'method_name_lowercase_run_longest',\n", " 'method_name_uppercase_run_avg', 'method_name_uppercase_run_longest']\n", "\n", "X = df.as_matrix(method_name_features)\n", "y = np.array(df['label'].tolist())\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_methods, X, y, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.950 (+/- 0.037)\n" ] } ], "prompt_number": 154 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We do see improvement in the classifier, so that is encouraging. But definitely still work to be done." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", "clf_methods.fit(X_train, y_train)\n", "y_pred = clf_methods.predict(X_test)\n", "labels = ['benign', 'malicious']\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 94.90% (93/98)\n", "benign/malicious: 5.10% (5/98)\n", "malicious/benign: 10.38% (11/106)\n", "malicious/malicious: 89.62% (95/106)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 155 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We check the importance from the classifier again. The method names features are not the most important features, but they rank relatively relatively high in importance. This explains the only slight improvement in the classifier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "importances = zip(method_name_features, clf_methods.feature_importances_)\n", "importances.sort(key=lambda k:k[1], reverse=True)\n", "for idx, im in enumerate(importances[0:15]):\n", " print (str(idx+1) + ':').ljust(4), im[0].ljust(35), round(im[1], 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What about the class names?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for idx, gcn in enumerate(df_good['class name']):\n", " print gcn\n", " if idx == 19:\n", " break" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "com/google/common/collect/ForwardingConcurrentMap\n", "org/apache/hadoop/io/compress/GzipCodec$GzipOutputStream$ResetableGZIPOutputStream\n", "com/google/common/collect/Multisets$UnmodifiableSortedMultiset\n", "hu/openig/mechanics/StaticDefensePlanner$1\n", "org/apache/commons/io/LineIterator\n", "org/apache/pig/builtin/IntMax\n", "org/apache/commons/lang/time/FastDateFormat$StringLiteral\n", "hu/openig/screen/items/ResearchProductionScreen$15\n", "org/dom4j/XPathException\n", "threadWordlistExec\n", "org/odlabs/wiquery/ui/autocomplete/AbstractAutocompleteComponent$InnerAutocomplete\n", "org/xml/sax/ContentHandler\n", "org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory\n", "org/apache/pig/PigException\n", "org/junit/runners/Enclosed\n", "org/jets3t/service/io/ProgressMonitoredInputStream\n", "org/apache/pig/impl/util/CastUtils\n", "com/google/common/base/Joiner$2\n", "com/google/common/io/CharStreams\n", "org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream\n" ] } ], "prompt_number": 157 }, { "cell_type": "code", "collapsed": false, "input": [ "for idx, gcn in enumerate(df_bad['class name']):\n", " print gcn\n", " if idx == 19:\n", " break" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Main\n", "YdCdHX/VcZaXVjyy\n", "aOcMSp\n", "a/zylasqwjlpbqyrwrr\n", "tljpjunbjwtqlywm/sdnrybknlf\n", "Mainer\n", "Main\n", "mNIJnGIOkm/Payload\n", "aHrMCrboe/chspSxY\n", "Main\n", "OSrAfQWThe/SHLeanN\n", "hhIji/XQDODV\n", "a/dwrwbjyhllzu\n", "H\n", "enudwwlhl/wsshvntsenuwajehdujlchpms\n", "Main\n", "iACVKaBQCV/HhtBSGn\n", "GondadGondadExp\n", "Main\n", "enudwwlhl/yhfwcgjacjjauyvut\n" ] } ], "prompt_number": 158 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Much like the method names, the malicious class names look like gibberish. They also seem shorter and do not have a lot of slashes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('class_name_length', 'label')\n", "plt.ylabel('Class Name Length')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA+IAAAE7CAYAAABZtDuFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcZFV58PHfw+6AOqxGMNoIsoiSkTWJCRSLK74GfKPG\njemouEKC0STixgzBBV9FxCgKBAdFUQyKIUpAhEJZFKMCiiIuDCio7LLMsMg87x/31kxNTXV1V8/t\nqlvdv+/nU1Sde0/dfro+n+H2U+c850RmIkmSJEmSBmOdYQcgSZIkSdJcYiIuSZIkSdIAmYhLkiRJ\nkjRAJuKSJEmSJA2QibgkSZIkSQNkIi5JkiRJ0gCZiEuSJEmSNEBDS8Qj4qiI+FJE/CoiVkTEDT36\nvjIivhARv4iI+yPixoj4akTsNUH/dSLiLRFxXUQsj4ibIuJDETFv5n4jSZIkSZImF5k5nB8csQK4\nA/gBsAfwh8x8cpd+GwHLgB8CXwNuALYG3lA+H5qZn+t4z0eBI4AvA+cBTy3b3wYOzGH90pIkSZKk\nOW+YifhYZi4tX/8YmDdBIr4u8JeZ+e2O41sB1wKPAI9vJdcRsQvwI+DszHxxW//DgROBV2TmmTPz\nW0mSJEmS1NvQpqa3kvAp9HukMwkvj98KfAvYCtiy7dTLyucTOt5yCsXI+iv7DlaSJEmSpIqM+mJt\nTwAeBO5uO7YnxSj5le0dM/NB4OryvCRJkiRJQzGyiXhEPJ8iqf5iZj7Udmpr4PbMfLjL224GtoiI\n9QYRoyRJkiRJnUYyEY+IpwCfBX4DvLXj9DyKUfJuHmjrI0mSJEnSwI1cIh4R2wLfpJh+/rzMvKOj\nyzJgwwnevhGQZR9JkiRJkgZupKZoR8QYcDHFiPYBmXltl263ADtFxPpdpqdvQzFt/Y8d13U7M0mS\nJElSpTIzuh0fmUS8TMKbwKMp9gK/eoKuVwLPAvYGLm17/0bAgvIaa3Brcal+xsfHWbJkybDDkCSp\n1rxfSvUU0TUHB0ZkanpEPIliJPwxwLMz84c9un+RYvr5kR3HDwMeBXxuRoKUJEmSJGkKhjYiHhGv\nAp5UNrcE1o+Id5XtpZl5Rtnv0RRJ+JOAjwE7R8TOHZe7oNxXnMz8cUR8HDg8Is4GzgN2Bo4Ampn5\n+Zn8vSRVZ2xsbNghSJJUe94vpdEzzKnprwb2LV+35oUfUz43gTPK15sDY2WfI7pcJ4H9gFvbjh0J\nLAVeBxwE3AacCLynisAlDUaj0Rh2CJIk1Z73S2n0DC0Rz8z9pthvKX1Ooc/MFcDx5UOSJEmSpNoY\niRpxSZIkSZJmi3C18GL7Mj8HSZIkSVJVImLC7cscEZckSZIkaYBMxCXVVrPZHHYIkiTVnvdLafSY\niEuSJEmSNEDWiGONuCRJkiSpWtaIS5IkSZJUEybikmrLmjdJkibn/VIaPSbikiRJkiQNkDXiWCMu\nSZIkSaqWNeKSJEmSJNWEibik2rLmTZKkyXm/lEaPibgkSZIkSQNkjTjWiEuSJEmSqmWNuCRJkiRJ\nNWEiLqm2rHmTJGly3i+l0WMiLkmSJEnSAFkjjjXikiRJkqRqWSMuSZIkSVJNmIhLqi1r3iRJmpz3\nS2n0mIhLkiRJkjRA1ohjjbgkSZIkqVrWiEuSJEmSVBMm4pJqy5o3SZIm5/1SGj0m4pIkSZIkDZA1\n4lgjLkmSJEmqljXikiRJkiTVhIm4pNqy5k2SpMl5v5RGj4m4JEmSJEkDZI041ohLkiRJkqpljbgk\nSZIkSTUxtEQ8Io6KiC9FxK8iYkVE3DBJ/x0j4pyIuDMi7ouIb0XEfhP0XSci3hIR10XE8oi4KSI+\nFBHzZua3kTQTrHmTJGly3i+l0TPMEfH3Ag3g58BdwIRzwyNiO+ByYG/gOOCfgU2A8yPigC5v+Qjw\nYeDHwOHAl4B/AM6NiK5TAyRJkiRJGoSh1YhHxFhmLi1f/xiYl5lPnqDvWcAhwO6ZeU15bGPgWuCB\nzNypre8uwI+AszPzxW3HDwdOBF6RmWd2XN8acUmSJElSZWpZI95KwidTJtwvBJqtJLx8//3AqcAO\nEbFn21teVj6f0HGpU4BlwCunG7OkwXKmnSRJkmajUVisbVdgA+CKLue+Wz7v0XZsT+AR4Mr2jpn5\nIHB1eV7SCFiypDnsECRJqj1rxKXRMwqJ+Nbl881dzrWObdPR//bMfHiC/ltExHoVxidJkiRJ0pSN\nQkLaWun8wS7nHujo03rdrW9n/3vWPjRJVWs2V01JP/30BmNjxetGo3hIkqTVNbxBSiNnFBLxZeXz\nhl3ObdTRp/V6iwmutRHF6uzLJjgvacg6E+5Fi4YUiCRJkjRDRiERv6V83qbLudax9mnrtwA7RcT6\nXaanb0Mxbf2PnRcaHx9nrBx6mz9/PgsWLFj57WKr7sa2bduDbS9d2lw5Ol6HeGzbtm3btu06tluv\n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\ngg==\n", "text": [ "" ] } ], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('class_name_slash_count', 'label')\n", "plt.ylabel('Class Name Slash Count')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('class_name_lowercase_run_longest', 'label')\n", "plt.ylabel('Max Run of Lower Case Letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 161, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n70tkH3sAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "df.boxplot('class_name_lowercase_run_avg', 'label')\n", "plt.ylabel('Avg Run of Lower Case Letters')\n", "plt.xlabel('')\n", "plt.title('')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 162, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.cross_validation import train_test_split\n", "\n", "clf_all = sklearn.ensemble.RandomForestClassifier(n_estimators=75)\n", "all_features = ['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface',\n", " 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count', 'constant_pool_count',\n", " 'entropy', 'interface_count', 'major version', 'methods_count',\n", " 'size', 'minor version',\n", " 'method_name_digit_run_avg', 'method_name_digit_run_longest',\n", " 'method_name_lowercase_run_avg', 'method_name_lowercase_run_longest',\n", " 'method_name_uppercase_run_avg', 'method_name_uppercase_run_longest',\n", " 'class_name_digit_run_avg', 'class_name_digit_run_longest',\n", " 'class_name_length', 'class_name_lowercase_run_avg',\n", " 'class_name_lowercase_run_longest', 'class_name_slash_count',\n", " 'class_name_uppercase_run_avg', 'class_name_uppercase_run_longest'] \n", "\n", "X = df.as_matrix(all_features)\n", "y = np.array(df['label'].tolist())\n", "labels = ['good', 'bad']\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_all, X, y, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.993 (+/- 0.018)\n" ] } ], "prompt_number": 163 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Finally some significant improvment." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", "clf_all.fit(X_train, y_train)\n", "y_pred = clf_all.predict(X_test)\n", "labels = ['benign', 'malicious']\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 97.06% (99/102)\n", "benign/malicious: 2.94% (3/102)\n", "malicious/benign: 0.00% (0/102)\n", "malicious/malicious: 100.00% (102/102)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 172 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### One of the features of the classifier is the ability to give a probability that the feature set belongs to a specific class. In the code below, we are asking the classifier to give us the probability the feature set (file) belongs to the malicious class and only marking the file as malicious if 80% of the trees declare it malicious." ] }, { "cell_type": "code", "collapsed": false, "input": [ "y_probs = clf_all.predict_proba(X_test)[:,1]\n", "thres = .80 # This can be set to whatever you'd like\n", "y_pred[y_probs>thres] = 'malicious'\n", "y_pred[y_probs<=thres] = 'benign'\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 99.02% (101/102)\n", "benign/malicious: 0.98% (1/102)\n", "malicious/benign: 2.94% (3/102)\n", "malicious/malicious: 97.06% (99/102)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 173 }, { "cell_type": "code", "collapsed": false, "input": [ "#### We do the same, but set the threshold lower, to only 20%" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "y_probs = clf_all.predict_proba(X_test)[:,1]\n", "thres = .20 # This can be set to whatever you'd like\n", "y_pred[y_probs>thres] = 'malicious'\n", "y_pred[y_probs<=thres] = 'benign'\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 95.10% (97/102)\n", "benign/malicious: 4.90% (5/102)\n", "malicious/benign: 0.00% (0/102)\n", "malicious/malicious: 100.00% (102/102)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAfEAAAFSCAYAAADiuuY9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYHVWd//H3JwiEsAoIBhhkM4koYR+QKASiDIgiOqPi\ngOxxw21GnSGMCyK7SxgclpGwCAgDiAT4MRIkECJbEkAIICEQCDigQAiYjYSlv78/zrnh5lK93O7q\ndN/qz+t56qm+p05VnWqafO9Z6hxFBGZmZtZ6BvV1AczMzKx7HMTNzMxalIO4mZlZi3IQNzMza1EO\n4mZmZi3KQdzMzKxFOYhbn5B0hKQ2SXv2YRlG5zIc3ldlsN4n6WJJbQ1pJ+T/9pt343rdPtesbA7i\nNtBF3qzaGv8b9+S/u/9mrN9wELeB7HZgDeCyvi6I9To1fD4JWCMinunGtXpyrlmp3tHXBTDrK5Gm\nK3ytr8thK19EvAm8ubLPNSuba+LW11bNfYxPS1oq6UFJn2vMJGkXSddKejHnmyXpeEmrNOSbIukp\nSUMlXSFpvqTFkm6S9N6GvIV94pI2kHShpJckLZQ0WdIOtWs35J0r6TZJIyTdKGmBpFckXS1p4zJ/\nUVVRNx5iH0nfy7/DJZKmSRqV84yWdIekRZKek/S9hmvsK+lKSU/mc1+WNKmrYyza69eWtI6kkyU9\nKulVSfMk/aH+b7KDc7eQdKmk5/Pf6BP5Wms05HtbH33dsTZJFzWkHSZpen7GRZLmSLpM0oZdeVar\nNtfEra+dDgwB/ovU5HkkcIWkwRHxKwBJBwC/BWYDPwXmA3sAJwI7AJ+tu14AawJTgbuBccBWwDeB\n6yR9ICIa/wFd3r8paXXgFmB74CJgev75lnzfor7VTYHbchmvy2X6ErAO8A/d+J0MFKeRKhJnAqsD\n3wZuknQ0cC5wHnAp8DngRElPRcSv87mHA+sBFwP/B2wGHANMlrR3RNzRbGEkrQfcAWwLXA2cDawC\n7AQcAFzZwbnvIf2trA2cAzwO7E36+xslaUyuwdd01Kde//f4BdIzTgW+D7wKbA7sD7wLmNfMM1oF\nRYQ3byt9A44A2oCngLXr0tcB5gIvkf5hHwz8FZgCDGq4xrfyNfaqS5uS077TkPc7OX3furTROe2w\nurSv5rRxDed/Jac/2ZA+N6f/U0P6f+X0YX39u+5vW91/+3uBd9SlfyKnvw7sVJe+KvAccFdd2pCC\n624EvAjc2JB+MdDWkHZCvtfmdWnn5LRjCq6tTs79dU7br+G8M3L6UR2Vp+5YG3Bh3effAq80/u17\n81bb3Jxufe3ciFhY+xARC0g1sHeSajIfJf3jfDGwvqQNaxvwu3zavg3XfBM4qyHttrzfppPyfAJ4\nA/jPhvQJwIJ2znk2In7TzfsNZOdGxBt1n2u157sj4v5aYkS8DswA3luXtqT2s6S1JG1ACoDTgd2a\nLYikQcDBwJ8iYkLj8Yhot+aczz0QuD8ibmo4fGou16eaLVP2Cqll6eOSGgfnmbk53frcox2kbQWs\nlX++sJ3zgxTk6z0XEY0D1l7K+w06Kc+W+fwl9YkR8XruD1+34JwnC9K6er+BbIXfW0S8nOPUUwV5\nX6budylpa+BkUndF43+Twv7mTmxIap7/326c+y5SoH2k8UB+pr+S/q664xRgT2Ai8JKk20lfXq+M\niEXdvKZViIO49Wf1tZ/vAA+0k++5hs8djRzujdrMyr5fVbT3e+tw5LektUh9xGsA44GHgIWk4H08\nqQWnPyus1Ut627/HEfGEpG2BMXnbCzgf+JGkPSOi6AukDSAO4tbXtgVuKEiDVFMbkn9eEhG3roTy\nzAXGSFozIhbXEiWtSqpNzV8JZbBiteA3BhgKHBl58GONpFO6ee15pNr+Dt0490XSl4j3Nx6Q9E5S\nWe+vS56fj60XEa/UpW9VdPHcqvS7vCFpf+BG4F+Br3WjvFYh7hO3vvYVSevUPkhaF/gy6R/U24FJ\nwAvAcfkfxBVIWiPXzMpyPWlE8jcb0seSBt1Z36vV1Ff490vSvsDft3NOhzOsRXpj4QpgW0lHNVOY\nfO4NwE6SGt9GOI7UGnNtXdpjef/Rhrzfbrx2O6+R/THv3/b/gw08rolbX3sRmJbfja29YrYZaYTw\nUkjvyZL6BB+TdCEwh9R/OYI0YOggUvNqTU+asCeQXg87SdI2pAFVI0mvsT1BCvDWN2r/Xe8gvbHw\nM0lbAM+SatCHkprWt+vg3I58D9gHmJC/ENyZz9sRWCUiDuvg3ONJQXmipHNIf6N7kv5ubgfqWwyu\nIPV1/1LSCNIX1v0oHj9xs6SXSc/8Z9Lf/RGkroNLu/BMVnEO4taXAvh30j92xwIbk2oph0TE/yzP\nFHGzpF1JtZpDSQOJXiYF1Z+R/uGuv2Yz81qvkDciXpM0BvgJ8EnSP8LTgY+Q+iIHd3R+E8cGumZ/\nN8v/u0bEK7nGewbwddK/Y/eS3p0+BvhAe+d2lJav+0FSQP406QviQtKAtV90cu4zknYjzV1wKCnY\n/pkUrE+KurkJImKhpI8BP8/3WgRcAxxC+ruudw7pb/CLwPqkAZP3A8dGxO0FvycbYNTBmxNmlinN\nDDeP9PrTx/q6PGa2ckkaR5r4Z2dgC+DpiGj3rQNJw0mTWe0JrEb68vXDiLitIO8gUhfel4D3kFoo\nrwJ+0PimTCP3iZs1kNRY24bUT78u8PuVXBwz6x9OJk0Q9TipxaSjuQO2Bu4izVlwOvBd0uuyk3JL\nX6PxpFbFh0mDFa8GvgHc0Nn8AK6JmzWQdBlptri7gWXAB4HPk5rvd6oftW5mA4OkLSJibv75YdKs\ngYVvFEi6itQds3NEzMxptbkElkbEiLq87yd1CV4TEZ+pS/8aadKqQyLiivbK5Zq42dtNAv6ONNBp\nPKk57HzgQw7gZgNTLYB3JgfrA4EptQCez19MGjg7LI/xqfl83p/ZcKnzgSWkMRbt8sA2swYRcSke\n+Wtm3TOS1Ad+d8GxaXm/C+nNF4BdSa9NTq/PGBHLJD2Yj7fLNXEzM7PybJL3zxYcq6Vt2pB/Xl4j\noCj/hkWz+dU4iJuZmZWnNsvksoJjSxvy1H4uytte/hU4iJuZmZWn9krY6gXHBjfkqf1clLeWPxry\nr8B94hUkya8cmFmviIiWWtSnJ/8edvNZawsybVpwrJZW39T+HDBC0qoFTeqbkpra36AdDuIVdedO\nO/d1EfqdC557jqM32aTzjAPMj0e2t8rrwPb4H8/lvTt+pa+L0a/cdPH2fV2EbrlxjeFNn3PAq491\nnqnYQ6Tm8T0Kju2e9/fWpU0nTdm7G2l6XWD5fBU7AFM6upmb083MrNIGvUNNb92V13m/ARgtaWQt\nPS/UdAwwOyJm1J1yJanJ/FsNlxpLWm731x3dzzVxMzOzTkj6AmlKVEjrN6wq6Xv589yIuKwu+zjS\nkrk3SxpPmoN/LGlZ2gPqrxsRD0s6G/iapGtIS86+j7QuwJSIuLyjcjmI24Cx49pr93URrIWs/+5d\n+roIVhKtWkqj81HAXvnnWj/7iXk/BVgexCNijqRRwGmkhZtWA+4D9ouIWwuu/S1gLmmhmwNIc6ef\nBfygs0I5iNuAsZODuDVhg6EdzrFhLaQnzeM1EbF3k/lnkZZJ7kreNtKqdj9vtlwO4mZmVmlataUG\n1DfFQdzMzCqtjJp4f+UgbmZmleaauJmZWYtyTdzMzKxFaRUHcTMzs5Y0yEHczMysNWmQg7iZmVlL\n0irVnWHcQdzMzCqtys3p1f16YmZmVnGuiZuZWaW5T9zMzKxFVbk53UHczMwqze+Jm5mZtSgNqu7w\nr+o+mZmZGalPvNmt8DrSxpLOk/RnScskPS3pTEnrFuQdLmmipPmSFkmaKqmp5Uy7wjVxMzOrtDL6\nxCVtBEwDhgLnAQ8D2wFfAfaUNCoiXs15twbuAl4DTgcWAGOBSZL2j4jJPS5Q5iBuZmaVVtLo9OOB\nzYHPR8SVy68t3QVcDvwrcHJOPhVYB9g5ImbmfJcAjwBnAyPKKBC4Od3MzCpOgwY1vRXYG1hSH8Cz\nK4FlwJEAktYEDgSm1AI4QEQsBiYAwyTtWtazOYibmVmlldQnvjqwtDExIgJ4FdhS0vrASGA14O6C\na0zL+13KeTIHcTMzq7hBq6jprcDDwPqStq9PlLQDsF7++B5gk/zzswXXqKVtWsJjAQ7iZmZWcSXV\nxM8E2oCrJO0vaXNJ+5Oa018HBKwBDMn5lxVco1aTH1JwrFscxM3MzDoREXcABwNrAzcCc4HrgcnA\n/8vZFgBL8s+rF1xmcN4vKTjWLR6dbmZmldaVyV6mvzif6S++3GGeiPiNpN8CHyAF88ciYp6k6aTa\n+BM5HYqbzGtpRU3t3eIgbmZmldaVV8x223gDdtt4g+Wfz5n1VGG+iGgDlo86l/RuYEfgtohYKukh\nUlP6HgWn757393a17J1xc7qZmVVaWTO2ve260iDgLFJ/+MkAEbEIuAEYLWlkXd61gGOA2RExo6xn\nc03czMwqrYzJXnIQng78ltQfvi7weWAn4PiIuL0u+zhgDHCzpPHAQtKMbUOBA3pcmDoO4mZmVmkl\nLYCyDHgA+GdSMF5CCur/EBG/r88YEXMkjQJOA44jvTd+H7BfRNxaRmFqHMTNzKzSypg7PSJeJwXw\nruafBRzU4xt3wkHczMwqraS50/slB3EzM6u0Kq8n7iBuZmaV5pq4mZlZi3IQNzMza1FVbk6v7pOZ\nmZlVnGviZmZWaW5ONzMza1FVbk53EDczs2qTa+JmZmYtyc3pZmZmLcrN6WZmZi3KNXEzM7MW5Zq4\nmZlZi6pyTby6X0/MzMxIQbzZrfA60oaSTpH0qKRFkl6UdKekwwvyDpc0UdL8nHeqpL3LfjbXxM3M\nrNpKaE6XtDowFRgGXAzcA6wJfB64SNL7IuK4nHdr4C7gNeB0YAEwFpgkaf+ImNzjAmUO4mZmVmkq\n5z3xDwMjgPER8e26a58DzAK+BByXk08F1gF2joiZOd8lwCPA2fk6pXBzupmZWeeW5P1f6hMj4nXg\nJWARgKQ1gQOBKbUAnvMtBiYAwyTtWlahXBM3M7NKK2N0ekTcJel3wL9JmgtMB4YAhwM7kWriACOB\n1YC7Cy4zLe93AWb0uFA4iJuZWcWVODr9QFJz+FV1aQuBT0fE9fnzJnn/bMH5tbRNyyqQg7iZmVVb\nOQPbViUF7/2BnwJ3AhsAxwJXSPpkRNxCqp0DLCu4zNK8H1JwrFscxM3MrNJKqol/Efgk8OWI+OXy\na0tXAA8D5+dR6bW+89ULrjE475cUHOsWB3EzM6s0qfOa+B1PPssdTz3XUZaPAAFcXZ8YEa9K+l9S\njfw9QO0iRU3mtbSipvZucRA3M7Nq60JN/EPbbMaHttls+eczbruvMcuqgCiOm++o2z9EakrfoyDf\n7nl/b6cF6iK/YmZmZpWmQYOa3gpMz/sjVri2tB6pmX0+8ERELAJuAEZLGlmXby3gGGB2RJQyMh1c\nEzczs4orqU/8bOBo4DRJ25FmZFufNBPbxsCxERE57zhgDHCzpPGkEexjgaHAAWUUpsZB3MzMqq0L\nfeKdiYiXJO0O/JA0Qv1g4FXgj8C/RMTEurxzJI0CTiPN4rYacB+wX0Tc2uPC1Kl0EJd0BHAhMDoi\npvZRGUYDtwJHRsSv+qIMZmYDWVnviUfEX4AvdzHvLOCgUm7cgUoH8X4k8mZmZiub1xO3HrgdWAN4\no68LYmZm1eIg3svyQIfX+rocZmYDVUmrmPVL1W1jWNGqkk6Q9LSkpZIelPS5xkySdpF0bV7ofamk\nWZKOl7RKQ74pkp6SNFTSFXnR98WSbpL03oa8oyW1NS4aL2kDSRdKeknSQkmTJe1Qu3ZD3rmSbpM0\nQtKNkhZIekXS1ZI2LvMXZWZWOYMGNb+1iIFSEz+dNFftf5Fe1j+SNNft4NpgM0kHAL8FZpPmxZ1P\neln/RGAH4LN11wvSYvBTSSvVjAO2Ar4JXCfpAxHR1lCG5X3ieXH5W4DtgYtI7x9un9Pm8/b+8yDN\n9HNbLuN1uUxfIq1Z+w/d+J2YmQ0IJS6A0u8MlCC+ATAyIhYCSDoPmAn8XNL/kAL7BaSAvE9dAD5f\n0oM5314RcXtOF7AhcEZE/LR2E0kvAmeQpue7uYPyHE0K2v8REafWnf8Q6V3EuQ35BWwDfDYiflOX\nvw34qqRhETG7y78NM7OBpIRXzPqr6j7Zis6tBXCAiFgAnAe8E9gb+CiwEXAxsL6kDWsb8Lt82r4N\n13wTOKsh7ba836aT8nyCNNDtPxvSJwAL2jnn2foA3uT9zMwGrkFqfmsRA6Um/mgHaVsBa+WfL2zn\n/CAF+XrPRUTjgLWX8n6DTsqzZT5/hZVsIuL13B++bsE5TxakdfV+ZmYDVlcWQGlVAyWId6S+//k7\nwAPt5Gtc3ubNDq7ZG1/jmrrfBc+9Vdwd116bndZeuxeKZGZV9tJfZjD/r6Wt1dF3Wqhm3ayBEsS3\nJU1I35gGqYZbW6B9SdlT4rVjLjBG0poRsbiWmBed35I0uK1Hjt5kk55ewswGuA2G7soGQ3dd/nnO\ng+f1YWm6r50FTSqhuk+2oq9IWqf2QdK6pKnzXiZNxjIJeAE4TtI7G0+WtEZegaYs1wOrkEaz1xtL\nGm1uZmZlkZrfWsRAqYm/CEyTdBFvvWK2GXBMRCwFkHQYMBF4TNKFwBxgPWAE8CnSHLj186/35L/y\nBNLrYSdJ2gaYAYwkvcb2BCnAm5lZGSpcEx8IQTyAfwf2BI4lLRn3GHBIRPzP8kwRN0valbTizKHA\nu0g19SeAn5EWeq+/ZjNzoa+QNyJekzQG+AlpHdrPkt4V/whwPjC4o/ObOGZmZi1Us25WpYN4RFxM\nem0M0kpiJ3SS/xHgC1247t7tpM+loYsiIqZQULOOiHmkFoHl8sxwW5PeV6/Pu2U79yu8tpmZvcV9\n4lY6SY21bUj99OsCv1/JxTEzsw7kqbvbOthea8g/XNLEPC33IklTJRVWAHui0jXxfm5Cnn71bmAZ\n8EHg88DjwC/7smBmZpVSznvi15Cm5W60PfBd0oDldDtpa+Au0uJXp5Mm8RoLTJK0f0RMLqNA4CDe\nlyaR+ujHkCab+SupP/z79a+dmZlZD5XwnnhEPMSKY6MAkLRX/vGCuuRTSW8a7RwRM3O+S4BHSFNr\nj+hxgTIH8T4SEZcCl/Z1OczMqq63ZmyTtCZwMPBn4Ka6tAOBKbUADhARiyVNAE6UtGtEzCijDO4T\nNzOzauu9udM/A6wNXBwRtTeFRgKr0TBAOZuW97v06HnquCZuZmbV1ntzpx8NtLHiuhu16TKfLchf\nS9u0rAI4iJuZWbX1wnvikoYDo4BbIuLpukO1abyXFZy2tCFPjzmIm5lZtfXOe+JH5/2EhvTa6pSr\nF5wzuCFPjzmIm5lZtXWhOX3qw48z9ZEnunY56R3AYcA84NqGw7UlJIuazGtpRU3t3eIgbmZm1daF\ngWp7jhzGniOHLf988lWTOsr+CWAj4MyIeL3h2EOkpvQ9Cs7bPe9LW9/Vo9PNzKzaNKj5rWO1pvQL\nGg9ExCLS0tejJY1cXoS0EuYxwOyyXi8D18TNzKzqShzYJmkTYD9gWl5vo8g40kReN0saDywkzdg2\nFDigtMLgIG5mZtaMI0hLUTcOaFsuIuZIGgWcRloZczXgPmC/iLi1zMI4iJuZWbWVODo9Ik4BTulC\nvlnAQaXduB0O4mZmVm1eT9zMzKxF9d6MbX3OQdzMzKqtdyZ76RccxM3MrNrcnG5mZtai3JxuZmbW\nolwTNzMza1HuEzczM2tN4Zq4mZlZi3KfuJmZWYuqcBCv7pOZmZlVnGviZmZWae4TNzMza1UVbk53\nEDczs2qrcE28ul9PzMzMIL0n3uzWDknrS/qppCckvSrpBUm3SvpQQ77hkiZKmi9pkaSpkvYu+9Fc\nEzczs0orq09c0nuAKcAQ4AJgNrAesB2wSV2+rYG7gNeA04EFwFhgkqT9I2JyKQXCQdzMzKquvD7x\ny0gt2CMj4vkO8p0KrAPsHBEzASRdAjwCnA2MKKtAbk43M7NKCw1qemskaU9gFHBGRDwvaVVJQwry\nrQkcCEypBXCAiFgMTACGSdq1rGdzEDczs2qTmt/e7mN5/2dJNwBLgEWSHpN0SF2+kcBqwN0F15iW\n97uU9WgO4mZmVmll1MSB4Xl/Pqkf/DDgKFK/96WSjsjHa33jzxZco5a2aSkPhvvEzcys6soZ2LZ2\n3i8A9o6IN9KlNRF4EjhF0q9Ig94AlhVcY2nev60ZvrscxM3MrNq6MLDtD/fN5A/3zewoy6t5f0Ut\ngANExCu5ef0LpNr6knxo9YJrDM77JQXHusVB3MzMBrwP7zySD+88cvnn087/dWOW/8v7vxac/pe8\nX4+Om8xraUVN7d3iPnEzM6u0kJreCtQGpf1dwbHN8v4F4GFSU/oeBfl2z/t7e/I89RzEzcys2jSo\n+e3tJgILgUPza2Tp0tJQ4CDgsYh4MiIWATcAoyWNrMu3FnAMMDsiZpT1aG5ONzOzSgt6PrAt931/\nB/hv4B5JF5L6vb9CiqVfr8s+DhgD3CxpPCn4jwWGAgf0uDB1HMTNzKzS2nllrPnrRJwvaR7wb8CP\ngTbS9KoHR8TddfnmSBoFnAYcR3pv/D5gv4i4tZTCZA7iZmZWbSUuRRoR1wLXdiHfLFIze69yEDcz\ns0orawGU/shB3MzMKq2s5vT+yEHczMyqzTXxt0jaEvgIsBFweUQ8JWk14N3A8xFRNNWcmZlZn6hy\nTbypJ5N0BvA4aYj9icCW+dAawKPAV0stnZmZWQ8FanprFV0O4pK+BHwH+C9gX3jrKSPib8B1wMfL\nLqCZmVlPlLSKWb/UTHP6V4GJEfEtSRsWHH8I2KucYpmZmVlnmvm6MQy4uYPjLwJFwd3MzKzvSM1v\nLaKZmvhSYM0Ojm8OvNKz4piZmZUrKrxMSDNPNgP4VNEBSYNJa6neWUahzMzMylLSKmb9UjNB/Axg\nD0mXAbWVWYZK2g+4nbQ8209LLp+ZmVmPeGAbEBG3SPoycBbwzzn50rxfBhwTEXeVXD4zM7MeaaVX\nxprV1GQvEfFLSTcA/wS8j/Sa2Wzgqoh4thfKZ2Zm1iOtVLNuVtMztkXEX4Bf9EJZzMzMStdKfdzN\nqu7XEzMzM8qbsU1SWzvbwoK8wyVNlDRf0iJJUyXtXfazdbkmLuk2IDrKAkRE7NPjUpmZmZWk5Ob0\nqcAvG9Jer/8gaWvgLuA14HRgATAWmCRp/4iYXFZhmmlO35IUxOu/orwDGJrT5gGLyyqYmZlZGUoe\n2PZkRFzeSZ5TgXWAnSNiJoCkS4BHgLOBEWUVpstfTyJii4jYMu9r22akCWD+A/gbMKqsgpmZmZWh\n5FfMJGlVSWu1c3BN4EBgSi2AA0TEYmACMEzSrmU9W4/bGCJiaUScCkwDft7zIpmZmfVb/wQsARZI\nel7SWZLWqTs+ElgNuLvg3Gl5v0tZhWl6dHoH7iA1IZiZmfUbJTanTweuAp4gNZcfAHwN2EvSHrm2\nvUnOW/TadS1t07IKVGYQ34L07cPMzKzfKGtgW0Ts3pB0maSZwMnAN4FTgCH52LKCSyzN+yEFx7ql\nmdHpm7dzaH3go6QHmFJCmawE393kZ31dBGsR4y79TF8XwVrETX1dgG7qSk38nnvuYdq0aZ3mK/AT\n4IfAx0hBfElOX70g7+C8X1JwrFuaqYnP7eT4Y8A3ul8UMzOz8nVlspfdPvhBdvvgB5d/PusXXZvT\nLCLekPQX3lqK+7m8L2oyr6WVNsNpM0H8xIK0AOaTAvgtEdFWSqnMzMxKEtF7M7blVTw3I70XDvAQ\nqSl9j4Lsteb4e8u6fzMLoJxQ1k3NzMxWljLWE5e0fkTMLzj0Y2AV4AaAiFiU1xj5tKSRde+JrwUc\nA8yOiBk9LlDWpSAuaW3gQeCsiDizrJubmZn1tpJGp39f0m7AbcCfgbVI/eCjgXtYcU2RccAY4GZJ\n44GFpBnbhpJGtJemS0E8IhZKWh9YVObNzczMeltJQfw20uqdhwMbAG+SVvE8Hvh5RLy2/H4RcySN\nAk4DjiO9uXUfsF9E3FpGYWqa6ROfRnpBfUKZBTAzM+tNZQTxiLgeuL6J/LOAg3p8404001FwHPBZ\nSUdJFV7XzczMKqWsVcz6ow5r4vnd8HkRsYQ0perLpJr46ZLmUPCum1cxMzOz/qQ3R6f3tc6a0+cC\nhwKX89YqZs/kY+8uyN/RUqVmZmZWomZeMduiF8thZmbWK1qpebxZZc6dbmZm1u84iJuZmbWogR7E\nPyypmWb3S3pQHjMzs1IN5IFtAF/KW1cE4CBuZmb9RtsAr4n/kjSlXFd4dLqZmfUrA705fWpEXN7r\nJTEzM+sFA7053czMrGUN9Jq4mZlZy3JN3MzMrEUN2Jp4RPR8JXUzM7M+VOWauIO0mZlZN0gaIulJ\nSW2SflFwfLikiZLmS1okaaqkvcssg5vTzcys0tp679InAhvmn1d4xVrS1sBdwGvA6cACYCwwSdL+\nETG5jAI4iJuZWaX1RnO6pJ2AbwLfJS3V3ehUYB1g54iYmc+5BHgEOBsYUUY53JxuZmaVFqjprSOS\nVgHOB34HXFtwfE3gQGBKLYADRMRiYAIwTNKuZTyba+JmZlZpvVAT/xdgOPApiivDI4HVgLsLjk3L\n+12AGT0tiGviZmZWaWXWxCVtCfwI+FFEPNNOtk3y/tmCY7W0Tbv9QHVcEzczs0prK3dVj/OAJyju\nB68ZkvfLCo4tbcjTIw7iZmZWaV2Z7OWP06fywIw/dJhH0qHAR4APR8SbHWRdkverFxwb3JCnRxzE\nzcys0rrSJ77Drnuxw657Lf/8q3NPWeG4pNVJte8bgeclbZMP1ZrF18uvlc0Dnms4Vq+WVtTU3jT3\niZuZWaVFNL8VWIP0TvjHgceB2Xm7LR8/NKcfDcwkNaXvUXCd3fP+3jKezTVxMzOrtLZy5k5fBHyG\nhkldgI2Ac0ivm10AzIyIxZJuAD4taWTde+JrAccAsyOixyPTwUHczMwqroxXzCLiDeCaxnRJW+Qf\n50TEb+u1L0kyAAATMElEQVQOjQPGADdLGg8sJM3YNhQ4oMcFyhzEzcys0tppHu/le8YcSaOA04Dj\nSO+N3wfsFxG3lnUfB3EzM7Nuioi5tDO+LCJmAQf15v0dxM3MrNIG7HriZmZmra7kyV76FQdxMzOr\ntN5Yxay/cBA3M7NK64uBbSuLg7iZmVVaSe+J90sO4mZmVmmuiZuZmbUo94mbmZm1KI9ONzMza1Fu\nTjczM2tRnuzFzMysRVW5Od3riZuZmbUo18TNzKzS3CduZmbWoqocxN2cbmZmldYWanprJGm4pF9L\nelTSK5IWS5ot6WxJW7aTf6Kk+ZIWSZoqae+yn801cTMzq7SSauKbAu8GrgH+D3gDGAkcCfyzpJ0i\n4ikASVsDdwGvAacDC4CxwCRJ+0fE5FJKhIO4mZlVXBlBPCJuBW5tTJc0FbgKOBw4ISefCqwD7BwR\nM3O+S4BHgLOBET0vUeLmdDMzq7S2aH5rwjN5/xqApDWBA4EptQAOEBGLgQnAMEm7lvNkrombmVnF\nlTl3uqTVgbWBwcC2pObyZ4ALcpaRwGrA3QWnT8v7XYAZZZTHNXEzM6u0iOa3DowFXiAF7puA14EP\nR8Tz+fgmef9swbm1tE17/lSJa+JmZlZpJc/Ydi3wJ2AtYCfg68Dtkj4SEU8CQ3K+ZQXnLs37IQXH\nusVB3MzMKq0rA9tmPTCFWQ9M6cK14lneqlFfL+kaUtP4eOCTwJJ8bPWC0wfn/ZKCY93iIG5mZpXW\nlSA+fPvRDN9+9PLP11/yoy5eOx6S9ACwZ056Lu+LmsxraUVN7d3iPnEzM7OeWQNoyz8/RGpK36Mg\n3+55f29ZN3YQNzOzSivjFTNJGxddO8/C9gFgMkBELAJuAEZLGlmXby3gGGB2RJQyMh3cnG5mZhVX\n0oxt50l6N2nCl2dI/ds7A58Dngf+vS7vOGAMcLOk8cBC0qj2ocABpZQmGzA1cUkXS2prSDtBUpuk\nzbtxvW6fa2ZmK09bW/NbgcuBecAXgDNJs7LtBJwFbF+bchUgIuYAo4B7gOOAn5AC+X4R8fsyn22g\n1cQbv49FQVoz16rw2jhmZtVQ0rSrVwNXN5F/FnBQz+/csQFTE88ap+05CVgjIp4pytyJnpxrZmYr\nScmTvfQrA60mvoKIeBN4c2Wfa2ZmK0/Jk730K31WE5d0RO5T3kfS9yTNlbRE0jRJo3Ke0ZLuyGux\nPifpew3X2FfSlZKezOe+LGmSpD2L7/q2MhT2a0taR9LJed3YVyXNk/QHSZ/rwrlbSLpU0vOSlkp6\nIl9rjYZ8b+ujrzvWJumihrTDJE3Pz7hI0hxJl0nasCvPamY2UEVE01ur6A818dNIXybOJM1w823g\nJklHA+cC5wGXkkYAnijpqYj4dT73cGA94GLS+q6bkYbwT5a0d0Tc0WxhJK0H3EGa2P5q0rJxq5AG\nMBwAXNnBue8BppMmxz8HeBzYmzRScZSkMbkGX9PRX8ryY5K+QHrGqcD3gVeBzYH9gXeRBluYmVmB\nForJTesPQXwQsHtEvAEg6U/AdcCvgd0i4v6cfiHwNHBsPgYwNiJWmL5O0nmkNVvH0b2h/KeQAvgX\nI2JCw7U7WwrnFGBD4GMRcVNOO0/S08B3SF86Lqy/ZBfL9CnSovL7RER97f2HXTzfzGzAame0eSX0\nh4Ft59YCeFarPd9dC+AAEfE6aX7a99alLQ/gktaStAFp1pzpwG7NFkTSIOBg4E+NATzfr93vc/nc\nA4H76wJ4zam5XJ9qtkzZK8CawMe78EXCzMzqVHlgW38I4k/Wf4iIl/OPTxXkfRnYoPZB0taS/kfS\ny6Sa6oukJeL2JzWzN2vDfN4D3Tj3XaRA+0jjgfxMfwW27MZ1IdXwnwYmAi9I+o2ko/MMQGZm1oEy\nZmzrr/pDc3p7I7w7HPmdA9hU0py140nz1S4k1XiPJ/VF92eFfyaS3vbfJCKekLQtaQagMcBewPnA\njyTtmZe/W8Ezj701Lm7dDXZg3Q13LKvcZjZAPBRLeChKW3DLekF/COLNqgW/MaQp7I6MiF/VZ5B0\nSjevPY9U29+hG+e+SPoS8f7GA5LeSSrr/XXJ8/Ox9SLilbr0rYouHhGvAb/LG5L2B24E/hX4WmP+\nzYcf2Y1HMDN7y3YawnZ6a+nrK96c34el6b5Wah5vVn9oTu+uWk19hWeQtC/w9+2c0+F/yjxo7Apg\nW0lHNVOYfO4NwE6S/qHh8HGkQWzX1qU9lvcfbcj77cZrt/Ma2R/z/p3NlNPMbKCJtmh6axWtWBOv\nDey6g9TP/DNJW5DWZ90BOJTUtL5dB+d25HvAPsCE/IXgznzejsAqEXFYB+ceTwrKEyWdA8whrTH7\nWeB2oL7F4ApSX/cvJY0gtQDsR12ff52bc7//HcCfSf32R5C6Di7twjOZmQ1YLRSTm9bXQbzZX+3y\n+coj4pVc4z0D+DrpWe4lDWo7hrQ0XOG5HaXl636QFJA/TRpRvpA0YO0XnZz7jKTdgBNJXybWIwXd\nU4CT6l8Pi4iFkj4G/DzfaxFwDXAIKaDXO4f0ReCLwPrAS6Sm+WMj4vaC35OZmWVVbk5XK81MY10j\nKfb4+JS+Loa1iHG/+2JfF8FaxCfenE1EtNRrrpLilCvf6Dxjg+M/946WeNZW7hM3MzPrVBnviUsa\nJulESfdIekHSAkl/lHS8VDf67638wyVNlDQ/T5U9VVLpb031dXO6mZlZryqpwfko4KukGUUvBV4n\njZ86CfispN0jYimkOUyAu4DXgNNJ85iMBSZJ2j8iJpdSIhzEzcys4trKieJXAydHxMK6tF9Kehz4\nD+Bo0lobkGbpXAfYOSJmAki6hDS26mxgRBkFAjenm5lZxUVb89vbrhFxX0MAr7kq798PIGlN0hTc\nU2oBPJ+/GJgADJO0a1nP5iBuZmaV1stLkW6W98/n/UhgNeDugrzT8n6X7j3J27k53czMKq23VjGT\ntAppeejXgctz8iZ5/2zBKbW0Tcsqg4O4mZlZ95wJ7A6Mi4jHc1ptpPqygvxLG/L0mIO4mZlVWm/M\nhyLpx8CxwH9HxOl1h2orxqxecNrghjw95iBuZmaV1pVpV5+edTtPz5rapetJOoE0Iv3CiPhKw+Hn\n8r6oybyWVtTU3i0O4mZmVmldWdBk82F7svmwPZd//sN1JxXmywH8B8DFEXFMQZaHSE3pexQc2z3v\n7+20QF3k0elmZlZpZczYBiDpB6QAfklEFK50GRGLSCtajpY0su7ctUjresyOiBllPZtr4mZmVmlt\nJSxjJulY4ATgGWCypEMbsvw1Im7JP48DxpBWoBxPWkRrLDAUOKDHhanjIG5mZpVW0sC2XUgrV/4d\nKy4rXTMFuCXfb46kUcBpwHGk98bvA/aLiFvLKEyNg7iZmVVa0QxsTV8j4kjgyCbyzwIO6vmdO+Yg\nbmZmlVbS3On9koO4mZlVWm+8J95fOIibmVmllTGwrb9yEDczs0qrcEXc74mbmZm1KtfEzcys0roy\nY1urchA3M7NK8+h0MzOzFuWauJmZWYtyEDczM2tRFY7hDuJmZlZtrombmZm1KM/YZmZm1qI8Y5uZ\nmVmLqnJN3DO2mZlZpUVbNL01kjRO0tWSnpTUJumpju4pabikiZLmS1okaaqkvct+NtfEzcys0koa\n2HYy8BJwP7Au0O5FJW0N3AW8BpwOLADGApMk7R8Rk8soEDiIm5mZdcVWETEXQNLDwJAO8p4KrAPs\nHBEz8zmXAI8AZwMjyiqUm9PNzKzS2iKa3hrVAnhnJK0JHAhMqQXwfP5iYAIwTNKu5TyZg7iZmVVc\nGX3iTRgJrAbcXXBsWt7v0pMb1HNzupmZVdpKHp2+Sd4/W3CslrZpWTdzEDczs0pbye+J1/rKlxUc\nW9qQp8ccxM3MrNJW8rSrS/J+9YJjgxvy9JiDuJmZVVpXmtOff+ZuXnimqBu7ac/lfVGTeS2tqKm9\nWxzEzcys0qKtrdM8G222Gxttttvyzw/fOb67t3uI1JS+R8Gx3fP+3u5evJFHp5uZWaW1tUXTW3dF\nxCLgBmC0pJG1dElrAccAsyNiRo8fKnNN3MzMKq2M0emSvgC8J398F7CqpO/lz3Mj4rK67OOAMcDN\nksYDC0kztg0FDuhxYeo4iJuZWaWVNLDtKGCv2iXz/sS8nwIsD+IRMUfSKOA04DjSe+P3AftFxK1l\nFKbGQdzMzCqtjCAeEU0tXhIRs4CDenzjTrhP3MzMrEW5Jm5mZpXWFp2PTm9VDuJmZlZpK3myl5XK\nQdzMzCrNQdzMzKxFreQFUFYqB3EzM6u0ti7M2NaqHMTNzKzS3JxuZmbWosKj083MzFqTa+JmZmYt\nykHczMysRXmyFzMzsxblmriZmVmLigq/YuYFUMzMzFqUg7iZmVVatEXTWxFJgyT9i6RZkl6V9Iyk\nn0oaspIfaTk3p5uZWaWV+J74eODrwG+BnwDbAt8AdpT0keiD+V0dxM3MrNLaShjYJun9pAB+TUR8\npi79KeAs4GDgih7fqEluTjczs0qLtramtwKfz/szG9LPB5YAh/bmM7THQdwGjL/N+2NfF8FayEOx\npK+LYCUpqU98V+BNYPoK145YBjyYj690DuI2YPztpQf6ugjWQhzEqyOiremtwCbAvIh4veDYs8CG\nklZ6F7X7xM3MrNJKmuxlCLCsnWNL6/IsKONmXeUgbmZmlVbSZC9LgA3bOTYYiJxnpVIfjIi3XibJ\n/1HNrFdEhPq6DM3oyb+H9c8qaRKwDzCksUld0p3ANhGxcbcL2k2uiVdQq/1PZmbWW0r893A68FFg\nN+COWqKkwcAOwJSS7tMUD2wzMzPr3JWkJvNvNaSPBdYAfr3SS4Sb083MzLpE0lnA14Brgd8B7yNN\nAHNHROzTJ2VyEDczM+ucpEGkmvgXgS2AF0k19B9E9M07iW5ONxsAJG0hqU3SDztK608kXSypumtI\nWsuJiLaI+HlEjIiIwRHxdxHxnb4K4OAgbtarJI3OgbJ+WyjpXknfyN/sV6aipremm+PyF4ATJG1f\nQpk64qZCsw54dLrZynE58L+AgE2BI0hzML8f+FJfFCgi5uaRtW924/QtgB8AT5KmnOwtftPCrAMO\n4mYrx/0RcXntg6RzgUeBYyR9PyJeaDxB0toRsbA3CxURr/XwEg6yZn3IzelmfSAH53vyx60kzZV0\nm6QdJU2S9Ap1NVxJ75V0qaS/SFom6SlJZ0ga0nhtSR+SdKekJZL+KukXwFoF+drtE5f0j5KmSHpZ\n0mJJsyT9p6RVJR0B3JqzXlTXTXBb3fmS9BVJ9+XzF0q6VdLognsNlvQTSc/lMk+TtG9zv1Gzgck1\ncbM+IEnANvnjPFLf7+bAZOAq4Gpy4JW0MylozgfOJS22sAPwDWCUpL0i4o2cdzfgFuBvwGl5fzAw\nqoPirNDvLOlkYBzwCPBz4C+5rJ8Gvg/cDpwCHA/8N/CHfOrzdZe5NN/3auAC0rSUhwC/l/TpiLih\nLu8VwCeB64FJ+V7XAE81ls3MGkSEN2/eemkDRgNtpOC3IfAuYCRpDeI24M6cb27+fFTBNR4E/gSs\n2ZB+UD7n8Lq0u0iLMWxTl7YqMC3n/UFd+hYFaX+f024BVuvCcx1WcOxT+djRDemrADOAJ+vS9s15\nL2zI+8mc/mZf/zf05q0/b25ON1s5fgS8QKqtPkAa2HYdKRDXvARcVH+SpO2A7Ui11TUkbVjbgDtJ\nCy7sm/NuBOwOXBcRT9SuEWme5/FdLOcheT8uut9ffiiwELi+obzvBP4fsIWkWitE7fl/Un+BiLgO\nmN3N+5sNGG5ON1s5/pvUtBzAYmB2RLzSkGdORDQ2H78v73+UtyIb5f1WeT+rIM+jXSzne0k14J6M\nOH8fsDYrNq/XC2Bj4AlSmd+kOGA/mstjZu1wEDdbOR6PiFs7yVM0YURt9PdPgZvaOe/lbpeqWNCz\nvmiRZrL6fAd5HunB9c0scxA3699qNdS2LnwJeCrv31dwbNsu3u8xYD/SwLkZHeTrKMg/DnwMmBYR\nizu535Ok7oDhpH7/ekXPYWZ13Cdu1o9FxB+Bh4EvS9qy8bikd0h6Z877POm1tU9Kem9dntWAf+ni\nLWvvsp8iadUO8i3K+w0Kjv2K9G/LqUUnSqpfc3li3n+3Ic9BwLBOS2s2wLkmbtb/fYH0itlMSReS\naqxDSK9ifQo4Drgk5/1X0rrGd0o6m7deMVulKzeKiBmSTgf+Hbhf0pWkvu0tgX8Edo2IBaTm8IXA\nVyUtyfd5PiJui4hrJF0EfE3STsCNpNfoNgM+CGydNyLiZkk3AIdLWp/0itnWpAUmHgY+0I3fl9mA\n4SBu1j+02zwdEQ9K2pH07vaBwJdJAfQp0mj2yXV575H0UdI74scBrwC/Ac4DHupSQSLGSXqQtOTi\nv5Fq1c+QgvGrOc9SSQcDJ5Gmj12d9OXhtnz86Dz5yxdzOVYjvW9+f/5c73P5OocAHwVmkr6cHEKa\nltbM2uGlSM3MzFqU+8TNzMxalIO4mZlZi3IQNzMza1EO4mZmZi3KQdzMzKxFOYibmZm1KAdxMzOz\nFuUgbmZm1qIcxM3MzFqUg7iZmVmL+v/tg6fRFRE1KgAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 174 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### You can see that we still get good results even when modifying the threshold level. When we plot the scores, we see that most of the scores are either near 0 or 1. This indicates that the classifier is confident about most of the labels." ] }, { "cell_type": "code", "collapsed": false, "input": [ "scores = clf_all.predict_proba(X_test)[:,1]\n", "plt.hist(scores, bins=20)\n", "plt.grid(True)\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nYII=\n", "text": [ "" ] } ], "prompt_number": 175 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We ask the classifier to tell the importance again, and we see the features extracted from the class name now totally dominate the classifier. On one hand, we got great results with this classifier, on the other, we see that is almost completely reliant on one major feature of the file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "importances = zip(all_features, clf_all.feature_importances_)\n", "importances.sort(key=lambda k:k[1], reverse=True)\n", "sum = 0\n", "for idx, im in enumerate(importances):\n", " sum += round(im[1], 5)\n", " print (str(idx+1) + ':').ljust(4), im[0].ljust(35), round(im[1], 5), sum" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1: class_name_slash_count 0.31448 0.31448\n", "2: class_name_length 0.28798 0.60246\n", "3: class_name_lowercase_run_longest 0.08185 0.68431\n", "4: entropy 0.06346 0.74777\n", "5: class_name_lowercase_run_avg 0.06043 0.8082\n", "6: constant_pool_count 0.03532 0.84352\n", "7: size 0.02862 0.87214\n", "8: class_name_uppercase_run_longest 0.02839 0.90053\n", "9: class_name_uppercase_run_avg 0.02537 0.9259\n", "10: method_name_lowercase_run_avg 0.01137 0.93727\n", "11: interface_count 0.01073 0.948\n", "12: class_name_digit_run_avg 0.00947 0.95747\n", "13: method_name_lowercase_run_longest 0.00751 0.96498\n", "14: acc_public 0.00604 0.97102\n", "15: methods_count 0.00509 0.97611\n", "16: method_name_uppercase_run_longest 0.00459 0.9807\n", "17: ap_count 0.0039 0.9846\n", "18: class_name_digit_run_longest 0.00336 0.98796\n", "19: major version 0.00286 0.99082\n", "20: method_name_uppercase_run_avg 0.00277 0.99359\n", "21: acc_abstract 0.00181 0.9954\n", "22: method_name_digit_run_avg 0.00148 0.99688\n", "23: acc_final 0.00105 0.99793\n", "24: method_name_digit_run_longest 0.00103 0.99896\n", "25: minor version 0.00054 0.9995\n", "26: acc_interface 0.0005 1.0\n", "27: acc_super 1e-05 1.00001\n", "28: acc_annotation 0.0 1.00001\n", "29: acc_enum 0.0 1.00001\n", "30: acc_synthetic 0.0 1.00001\n" ] } ], "prompt_number": 176 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Using a different classifier\n", "\n", "Let's try a different classifier: Extra Trees Classifier (like RandomForest, but even more random).
\n", "http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "clf_er = sklearn.ensemble.ExtraTreesClassifier(n_estimators=50)\n", "X_er = df.as_matrix(all_features)\n", "y_er = np.array(df['label'].tolist())\n", "labels = ['benign', 'malicious']\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_er, X_er, y_er, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.997 (+/- 0.013)\n" ] } ], "prompt_number": 179 }, { "cell_type": "code", "collapsed": false, "input": [ "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X_er, y_er, test_size=my_tsize, random_state=my_seed)\n", "clf_er.fit(X_train, y_train)\n", "y_pred = clf_er.predict(X_test)\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 100.00% (90/90)\n", "benign/malicious: 0.00% (0/90)\n", "malicious/benign: 0.00% (0/114)\n", "malicious/malicious: 100.00% (114/114)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 180 }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.svm\n", "import sklearn.preprocessing\n", "clf_svc = sklearn.svm.SVC()\n", "X_svc = df.as_matrix(all_features)\n", "X_svc = sklearn.preprocessing.scale(X_svc)\n", "y_svc = np.array(df['label'].tolist())\n", "labels = ['benign', 'malicious']\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_svc, X_svc, y_svc, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.993 (+/- 0.015)\n" ] } ], "prompt_number": 181 }, { "cell_type": "code", "collapsed": false, "input": [ "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X_svc, y_svc, test_size=my_tsize, random_state=my_seed)\n", "clf_svc.fit(X_train, y_train)\n", "y_pred = clf_svc.predict(X_test)\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 98.89% (89/90)\n", "benign/malicious: 1.11% (1/90)\n", "malicious/benign: 0.00% (0/114)\n", "malicious/malicious: 100.00% (114/114)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nmZmZtagq18Q9Y5uZmVVatEXTWyNJ4yVdLelpSW2SnunonpJGSJokab6kRZKmSdqn7GdzTdzMzCqt\npIFtpwCvAA8A6wLtXlTSNsBdwBvAGcACYBwwWdIBETGljAKBg7iZmVlXbB0RcwEkPQoM7SDvacA6\nwC4RMTOfcwnwGHAOMLKsQrk53czMKq0toumtUS2Ad0bSmsBBwNRaAM/nLwYmAsMl7VbOkzmIm5lZ\nxZXRJ96EUcDqwN0Fx6bn/a49uUE9N6ebmVmlreTR6Zvm/fMFx2ppm5V1MwdxMzOrtJX8nnitr3xZ\nwbGlDXl6zEHczMwqbSVPu7ok7wcXHBvSkKfHHMTNzKzSutKc/uJzd/PSc0Xd2E17Ie+LmsxraUVN\n7d3iIG5mZpUWbW2d5tlo893ZaPPdl39+9M4J3b3dI6Sm9D0Lju2R9/d19+KNPDrdzMwqra0tmt66\nKyIWATcAYySNqqVLWgs4FpgdEff2+KEy18TNzKzSyhidLumLwPvyxw2B1SR9L3+eGxGX1WUfD4wF\nbpY0AVhImrFtE+DAHhemjoO4mZlVWkkD244G9q5dMu9PyvupwPIgHhFzJI0GTgeOJ703fj+wf0Tc\nWkZhahzEzcys0soI4hHR1OIlETELOLjHN+6E+8TNzMxalGviZmZWaW3R+ej0VuUgbmZmlbaSJ3tZ\nqRzEzcys0hzEzczMWtRKXgBlpXIQNzOzSmvrwoxtrcpB3MzMKs3N6WZmZi0qPDrdzMysNbkmbmZm\n1qIcxM3MzFqUJ3sxMzNrUa6Jm5mZtaio8CtmXgDFzMysRTmIm5lZpUVbNL0VkTRI0j9ImiXpdUnP\nSfqJpKEr+ZGWc3O6mZlVWonviU8AvgH8BvgxsB3wTWAnSR+LPpjf1UHczMwqra2EgW2SPkgK4NdE\nxN/VpT8DnA0cAlzR4xs1yc3pZmZWadHW1vRW4At5f1ZD+gXAEuCw3nyG9jiI24Dxl3kP9nURrIU8\nEkv6ughWkpL6xHcD3gZmrHDtiGXAw/n4SucgbgPGX155qK+LYC3EQbw6Itqa3gpsCsyLiDcLjj0P\nDJO00ruo3SduZmaVVtJkL0OBZe0cW1qXZ0EZN+sqB3EzM6u0kiZ7WQIMa+fYECBynpVKfTAi3nqZ\nJP9HNbNeERHq6zI0oyf/HtY/q6TJwL7A0MYmdUl3AttGxMbdLmg3uSZeQa32P5mZWW8p8d/DGcDH\ngd2BO2qJkoYAOwJTS7pPUzywzczMrHNXkprMv92QPg5YA/jVSi8Rbk43MzPrEklnA18HrgV+C3yA\nNAHMHRGxb5+UyUHczMysc5IGkWriXwK2BF4m1dB/ENE37yS6Od1sAJC0paQ2ST/sKK0/kXSxpOqu\nIWktJyLaIuKnETEyIoZExF9FxHf7KoCDg7hZr5I0JgfK+m2hpPskfTN/s1+Zipremm6Oy18ATpS0\nQwll6oibCs064NHpZivH5cD/AgI2A44kzcH8QeDLfVGgiJibR9a+3Y3TtwR+ADxNmnKyt/hNC7MO\nOIibrRwPRMTltQ+SzgMeB46V9P2IeKnxBElrR8TC3ixURLzRw0s4yJr1ITenm/WBHJzvyR+3ljRX\n0m2SdpI0WdJr1NVwJb1f0qWS/iRpmaRnJJ0paWjjtSV9RNKdkpZI+rOknwFrFeRrt09c0v+TNFXS\nq5IWS5ol6T8krSbpSODWnPWium6C2+rOl6SvSro/n79Q0q2SxhTca4ikH0t6IZd5uqT9mvuNmg1M\nromb9QFJArbNH+eR+n63AKYAVwFXkwOvpF1IQXM+cB5psYUdgW8CoyXtHRFv5by7A7cAfwFOz/tD\ngNEdFGeFfmdJpwDjgceAnwJ/ymX9LPB94HbgVOAE4L+A3+dTX6y7zKX5vlcDvyBNS3ko8DtJn42I\nG+ryXgF8GrgemJzvdQ3wTGPZzKxBRHjz5q2XNmAM0EYKfsOADYFRpDWI24A7c765+fPRBdd4GPgD\nsGZD+sH5nCPq0u4iLcawbV3aasD0nPcHdelbFqT9dU67BVi9C891eMGxz+RjxzSkrwLcCzxdl7Zf\nznthQ95P5/S3+/q/oTdv/Xlzc7rZyvEj4CVSbfUh0sC260iBuOYV4KL6kyRtD2xPqq2uIWlYbQPu\nJC24sF/OuxGwB3BdRDxVu0akeZ4ndLGch+b9+Oh+f/lhwELg+obyvgf4H2BLSbVWiNrz/7j+AhFx\nHTC7m/c3GzDcnG62cvwXqWk5gMXA7Ih4rSHPnIhobD7+QN7/KG9FNsr7rfN+VkGex7tYzveTasA9\nGXH+AWBtVmxerxfAxsBTpDK/TXHAfjyXx8za4SButnI8GRG3dpKnaMKI2ujvnwA3tXPeq90uVbGg\nZ33RIs1k9YUO8jzWg+ubWeYgbta/1WqobV34EvBM3n+g4Nh2XbzfE8D+pIFz93aQr6Mg/yTwCWB6\nRCzu5H5Pk7oDRpD6/esVPYeZ1XGfuFk/FhEPAo8CX5G0VeNxSatKek/O+yLptbVPS3p/XZ7VgX/o\n4i1r77KfKmm1DvItyvsNCo79kvRvy2lFJ0qqX3N5Ut7/U0Oeg4HhnZbWbIBzTdys//si6RWzmZIu\nJNVYh5JexfoMcDxwSc77j6R1je+UdA7vvGK2SlduFBH3SjoD+BfgAUlXkvq2twL+H7BbRCwgNYcv\nBL4maUm+z4sRcVtEXCPpIuDrknYGbiS9Rrc58GFgm7wRETdLugE4QtL6pFfMtiEtMPEo8KFu/L7M\nBgwHcbP+od3m6Yh4WNJOpHe3DwK+Qgqgz5BGs0+py3uPpI+T3hE/HngN+DVwPvBIlwoSMV7Sw6Ql\nF/+ZVKt+jhSMX895lko6BDiZNH3sYNKXh9vy8WPy5C9fyuVYnfS++QP5c73P5+scCnwcmEn6cnIo\naVpaM2uHlyI1MzNrUe4TNzMza1EO4mZmZi3KQdzMzKxFOYibmZm1KAdxMzOzFuUgbmZm1qIcxM3M\nzFqUg7iZmVmLchA3MzNrUQ7iZmZmLer/A3a6p/ruFinFAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 182 }, { "cell_type": "code", "collapsed": false, "input": [ "# Now we can use scikit learn's cross validation to assess predictive performance.\n", "scores = sklearn.cross_validation.cross_val_score(clf_all, X_all, y_all, cv=20)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.992 (+/- 0.029)\n" ] } ], "prompt_number": 183 }, { "cell_type": "code", "collapsed": false, "input": [ "# Now we can use scikit learn's cross validation to assess predictive performance.\n", "scores = sklearn.cross_validation.cross_val_score(clf_er, X_er, y_er, cv=20)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.995 (+/- 0.017)\n" ] } ], "prompt_number": 184 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing on a large corpus of files\n", "\n", "#### In the next couple steps, we train a classifier on all the data, and then test it on approximately 366K files. This data is not labeled, but I would expect them all to be benign. Maybe a few malicious ones, but a small number." ] }, { "cell_type": "code", "collapsed": false, "input": [ "clf_everything = sklearn.ensemble.RandomForestClassifier(n_estimators=50)\n", "all_features = ['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface',\n", " 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count', 'constant_pool_count',\n", " 'entropy', 'size', 'interface_count', 'major version', 'methods_count', 'minor version',\n", " 'method_name_digit_run_avg', 'method_name_digit_run_longest',\n", " 'method_name_lowercase_run_avg', 'method_name_lowercase_run_longest',\n", " 'method_name_uppercase_run_avg', 'method_name_uppercase_run_longest',\n", " 'class_name_digit_run_avg', 'class_name_digit_run_longest',\n", " 'class_name_length', 'class_name_lowercase_run_avg',\n", " 'class_name_lowercase_run_longest', 'class_name_slash_count',\n", " 'class_name_uppercase_run_avg', 'class_name_uppercase_run_longest'] \n", "\n", "X_all = df.as_matrix(all_features)\n", "y_all = np.array(df['label'].tolist())\n", "\n", "clf_everything.fit(X_all, y_all)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 185, "text": [ "RandomForestClassifier(bootstrap=True, compute_importances=None,\n", " criterion='gini', max_depth=None, max_features='auto',\n", " min_density=None, min_samples_leaf=1, min_samples_split=2,\n", " n_estimators=50, n_jobs=1, oob_score=False, random_state=None,\n", " verbose=0)" ] } ], "prompt_number": 185 }, { "cell_type": "code", "collapsed": false, "input": [ "java_big_pile_df = pd.read_hdf('data/java_clean_df.hd5', 'table')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/opt/visiblerisk/lib/python2.7/site-packages/pandas/io/pytables.py:520: DeprecationWarning: openFile() is pending deprecation, use open_file() instead. You may use the pt2to3 tool to update your source code.\n", " self._handle = tables.openFile(self._path, self._mode, **kwargs)\n", "/opt/visiblerisk/lib/python2.7/site-packages/pandas/io/pytables.py:1017: DeprecationWarning: getNode() is pending deprecation, use get_node() instead. You may use the pt2to3 tool to update your source code.\n", " return self._handle.getNode(self.root, key)\n" ] } ], "prompt_number": 190 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Again, one of the features of the classifier is the ability to give a probability that the feature set belongs to a specific class. In the code below, we are asking the classifier to give us the probability the feature set (file) belongs to the malicious class. We interpret these results as anything less the 0.5 is benign, 0.5 - 0.8 is a gray area, and 0.8 and above is malicious." ] }, { "cell_type": "code", "collapsed": false, "input": [ "clean = 0\n", "gray = 0\n", "bad = 0\n", "for x in java_big_pile_df.as_matrix(all_features):\n", " try:\n", " score = clf_everything.predict_proba(x)[:,1][0]\n", " if score < 0.5:\n", " clean += 1\n", " elif score < 0.8:\n", " gray += 1\n", " else:\n", " bad += 1\n", " except:\n", " print \"Sad\"\n", " print x\n", " break\n", "\n", "print java_big_pile_df.shape\n", "print clean\n", "print gray\n", "print bad" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface', 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count', 'constant_pool_count', 'entropy', 'size', 'interface_count', 'major version', 'methods_count', 'minor version', 'method_name_digit_run_avg', 'method_name_digit_run_longest', 'method_name_lowercase_run_avg', 'method_name_lowercase_run_longest', 'method_name_uppercase_run_avg', 'method_name_uppercase_run_longest', 'class_name_digit_run_avg', 'class_name_digit_run_longest', 'class_name_length', 'class_name_lowercase_run_avg', 'class_name_lowercase_run_longest', 'class_name_slash_count', 'class_name_uppercase_run_avg', 'class_name_uppercase_run_longest']\n", "(366341, 35)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "339771\n", "10971\n", "15599\n" ] } ], "prompt_number": 191 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Wow. That looks mostly horrible. We did only start with 500 files of each, maybe more training data will help. We expand to about 2,000 malicious files and 2,000 benign files. We randomly select 2000 files from the large corpus as label them as benign." ] }, { "cell_type": "code", "collapsed": false, "input": [ "java_more_bad_df = pd.read_hdf('data/java_malicious_df.hd5', 'table')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/opt/visiblerisk/lib/python2.7/site-packages/pandas/io/pytables.py:520: DeprecationWarning: openFile() is pending deprecation, use open_file() instead. You may use the pt2to3 tool to update your source code.\n", " self._handle = tables.openFile(self._path, self._mode, **kwargs)\n", "/opt/visiblerisk/lib/python2.7/site-packages/pandas/io/pytables.py:1017: DeprecationWarning: getNode() is pending deprecation, use get_node() instead. You may use the pt2to3 tool to update your source code.\n", " return self._handle.getNode(self.root, key)\n" ] } ], "prompt_number": 219 }, { "cell_type": "code", "collapsed": false, "input": [ "java_big_pile_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
acc_abstractacc_annotationacc_enumacc_finalacc_interfaceacc_publicacc_superacc_syntheticap_countattributes countclass nameclass_name_digit_run_avgclass_name_digit_run_longestclass_name_lengthclass_name_lowercase_run_avgclass_name_lowercase_run_longestclass_name_slash_countclass_name_uppercase_run_avgclass_name_uppercase_run_longestconstant_pool_count
0 0 0 0 0 0 1 1 0 2 1 com/jidesoft/combobox/DateChooserPanel 0 0 38 5.333333 8 3 1 1 1037...
1 1 0 0 0 1 1 0 0 3 0 org/jmol/modelset/BondIterator 0 0 30 5.000000 8 3 1 1 11...
2 0 0 0 0 0 1 1 0 2 2 org/hibernate/engine/query/ParameterParser 0 0 42 6.000000 9 4 1 1 152...
3 0 0 0 0 0 1 1 0 2 1 com/intellij/updater/Utils 0 0 26 5.500000 8 3 1 1 330...
4 0 0 0 0 0 1 1 0 2 1 com/kiwisoft/db/driver/SybaseDriver 0 0 35 4.833333 8 4 1 1 151...
\n", "

5 rows \u00d7 35 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 220, "text": [ " acc_abstract acc_annotation acc_enum acc_final acc_interface \\\n", "0 0 0 0 0 0 \n", "1 1 0 0 0 1 \n", "2 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "4 0 0 0 0 0 \n", "\n", " acc_public acc_super acc_synthetic ap_count attributes count \\\n", "0 1 1 0 2 1 \n", "1 1 0 0 3 0 \n", "2 1 1 0 2 2 \n", "3 1 1 0 2 1 \n", "4 1 1 0 2 1 \n", "\n", " class name class_name_digit_run_avg \\\n", "0 com/jidesoft/combobox/DateChooserPanel 0 \n", "1 org/jmol/modelset/BondIterator 0 \n", "2 org/hibernate/engine/query/ParameterParser 0 \n", "3 com/intellij/updater/Utils 0 \n", "4 com/kiwisoft/db/driver/SybaseDriver 0 \n", "\n", " class_name_digit_run_longest class_name_length \\\n", "0 0 38 \n", "1 0 30 \n", "2 0 42 \n", "3 0 26 \n", "4 0 35 \n", "\n", " class_name_lowercase_run_avg class_name_lowercase_run_longest \\\n", "0 5.333333 8 \n", "1 5.000000 8 \n", "2 6.000000 9 \n", "3 5.500000 8 \n", "4 4.833333 8 \n", "\n", " class_name_slash_count class_name_uppercase_run_avg \\\n", "0 3 1 \n", "1 3 1 \n", "2 4 1 \n", "3 3 1 \n", "4 4 1 \n", "\n", " class_name_uppercase_run_longest constant_pool_count \n", "0 1 1037 ... \n", "1 1 11 ... \n", "2 1 152 ... \n", "3 1 330 ... \n", "4 1 151 ... \n", "\n", "[5 rows x 35 columns]" ] } ], "prompt_number": 220 }, { "cell_type": "code", "collapsed": false, "input": [ "java_big_pile_df['class_name_length'].describe()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 221, "text": [ "count 366341.000000\n", "mean 48.081181\n", "std 19.812234\n", "min 1.000000\n", "25% 36.000000\n", "50% 47.000000\n", "75% 61.000000\n", "max 161.000000\n", "Name: class_name_length, dtype: float64" ] } ], "prompt_number": 221 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Randomize list" ] }, { "cell_type": "code", "collapsed": false, "input": [ "java_random_df = java_big_pile_df.reindex(np.random.permutation(java_big_pile_df.index))\n", "java_random_2k_df = java_random_df[0:2000]\n", "java_random_the_rest_df = java_random_df[2000:]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 239 }, { "cell_type": "code", "collapsed": false, "input": [ "java_random_2k_df['label'] = 'benign'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 240 }, { "cell_type": "code", "collapsed": false, "input": [ "java_more_bad_df['label'] = 'malicious'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 241 }, { "cell_type": "code", "collapsed": false, "input": [ "java_4k_df = pd.concat([java_more_bad_df, java_random_2k_df], ignore_index=True)\n", "java_4k_df.fillna(0, inplace=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 242 }, { "cell_type": "code", "collapsed": false, "input": [ "clf_4k = sklearn.ensemble.RandomForestClassifier(n_estimators=75)\n", "all_features = ['acc_abstract', 'acc_annotation', 'acc_enum', 'acc_final', 'acc_interface',\n", " 'acc_public', 'acc_super', 'acc_synthetic', 'ap_count',\n", " 'class_name_digit_run_avg', 'class_name_digit_run_longest',\n", " 'class_name_length', 'class_name_lowercase_run_avg',\n", " 'class_name_lowercase_run_longest', 'class_name_slash_count',\n", " 'class_name_uppercase_run_avg', 'class_name_uppercase_run_longest',\n", " 'constant_pool_count', 'entropy', 'interface_count', 'major version',\n", " 'method_name_digit_run_avg', 'method_name_digit_run_longest',\n", " 'method_name_lowercase_run_avg', 'method_name_lowercase_run_longest',\n", " 'method_name_uppercase_run_avg', 'method_name_uppercase_run_longest',\n", " 'methods_count', 'minor version', 'size']\n", "\n", "X = java_4k_df.as_matrix(all_features)\n", "y = np.array(java_4k_df['label'].tolist())\n", "\n", "scores = sklearn.cross_validation.cross_val_score(clf_4k, X, y, cv=10)\n", "print(\"Accuracy: %0.3f (+/- %0.3f)\" % (scores.mean(), scores.std() * 2))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy: 0.989 (+/- 0.008)\n" ] } ], "prompt_number": 243 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing out this new classifier still shows us good results." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn.ensemble\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# 80/20 Split for predictive test\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", "clf_4k.fit(X_train, y_train)\n", "y_pred = clf_4k.predict(X_test)\n", "labels = ['benign', 'malicious']\n", "cm = confusion_matrix(y_test, y_pred, labels)\n", "plot_cm(cm, labels)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Confusion Matrix Stats\n", "benign/benign: 99.00% (398/402)\n", "benign/malicious: 1.00% (4/402)\n", "malicious/benign: 0.79% (3/382)\n", "malicious/malicious: 99.21% (379/382)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 244 }, { "cell_type": "code", "collapsed": false, "input": [ "# Feature Selection\n", "# Which features best deferentiated the two classes?\n", "# Here we're going to grab the feature_importances from the classifier itself, \n", "importances = zip(all_features, clf_4k.feature_importances_)\n", "importances.sort(key=lambda k:k[1], reverse=True)\n", "sum = 0\n", "for idx, im in enumerate(importances):\n", " sum += round(im[1], 5)\n", " print (str(idx+1) + ':').ljust(4), im[0].ljust(35), round(im[1], 5), sum" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1: class_name_slash_count 0.25082 0.25082\n", "2: class_name_length 0.22822 0.47904\n", "3: entropy 0.0733 0.55234\n", "4: constant_pool_count 0.06575 0.61809\n", "5: class_name_uppercase_run_avg 0.06179 0.67988\n", "6: size 0.05436 0.73424\n", "7: class_name_lowercase_run_longest 0.05158 0.78582\n", "8: class_name_uppercase_run_longest 0.04584 0.83166\n", "9: method_name_lowercase_run_longest 0.03077 0.86243\n", "10: method_name_lowercase_run_avg 0.02461 0.88704\n", "11: class_name_lowercase_run_avg 0.02118 0.90822\n", "12: interface_count 0.01524 0.92346\n", "13: major version 0.01305 0.93651\n", "14: method_name_uppercase_run_longest 0.01267 0.94918\n", "15: method_name_uppercase_run_avg 0.01198 0.96116\n", "16: methods_count 0.01062 0.97178\n", "17: ap_count 0.00603 0.97781\n", "18: class_name_digit_run_avg 0.00561 0.98342\n", "19: minor version 0.00547 0.98889\n", "20: acc_public 0.00262 0.99151\n", "21: acc_abstract 0.00221 0.99372\n", "22: class_name_digit_run_longest 0.00133 0.99505\n", "23: acc_super 0.00132 0.99637\n", "24: acc_final 0.00128 0.99765\n", "25: method_name_digit_run_avg 0.00089 0.99854\n", "26: method_name_digit_run_longest 0.0008 0.99934\n", "27: acc_interface 0.00065 0.99999\n", "28: acc_annotation 0.0 0.99999\n", "29: acc_enum 0.0 0.99999\n", "30: acc_synthetic 0.0 0.99999\n" ] } ], "prompt_number": 245 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Let's test on the large corpus again." ] }, { "cell_type": "code", "collapsed": false, "input": [ "clf_everything_4k = sklearn.ensemble.RandomForestClassifier(n_estimators=50)\n", "\n", "X_all = java_4k_df.as_matrix(all_features)\n", "y_all = np.array(java_4k_df['label'].tolist())\n", "\n", "clf_everything_4k.fit(X_all, y_all)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 246, "text": [ "RandomForestClassifier(bootstrap=True, compute_importances=None,\n", " criterion='gini', max_depth=None, max_features='auto',\n", " min_density=None, min_samples_leaf=1, min_samples_split=2,\n", " n_estimators=50, n_jobs=1, oob_score=False, random_state=None,\n", " verbose=0)" ] } ], "prompt_number": 246 }, { "cell_type": "code", "collapsed": false, "input": [ "clean = 0\n", "gray = 0\n", "bad = 0\n", "X_rest = java_random_the_rest_df.as_matrix(all_features)\n", "for x in X_rest:\n", " score = clf_everything_4k.predict_proba(x)[:,1][0]\n", " if score < 0.5:\n", " clean += 1\n", " elif score < 0.8:\n", " gray += 1\n", " else:\n", " bad += 1\n", "\n", "print java_random_the_rest_df.shape[0]\n", "print clean\n", "print gray\n", "print bad" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "364341\n", "359198\n", "3766\n", "1377\n" ] } ], "prompt_number": 247 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### That's much better. But still a large number of files in the gray area and marked as malicious. More than I would expect. This means we either need more training data, or better features." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }