Change language

Python | CAP — cumulative accuracy profile analysis

| |

The CAP, commonly referred to as the Cumulative Accuracy Profile, is used to evaluate the performance of a classification model. This helps us understand and conclude about the robustness of the classification model. To visualize this, our graph depicts three different curves:

  1. Random plot
  2. Plot generated using SVM classifier or random forest classifier
  3. Ideal plot (ideal line)

We are working with data to understand concept.

Code: load dataset.

# import libraries

import pandas as pd

import seaborn as sns

import matplotlib. pyplot as plt

import numpy as np

# loading dataset

data = pd.read_csv ( ’C: Users DELL Desktop Social_Network_Ads .csv’ )


print ( "Data Head:" , data .head ())


 Data Head: User ID Gender Age Estimated Salary Purchased 0 15624510 Male 19 19000 0 1 15810944 Male 35 20000 0 2 15668575 Female 26 43000 0 3 15603246 Female 27 57000 0 4 15804002 Male 19 76000 0 

Code: data input / output.

# Input and output

x = data.iloc [:, 2 : 4 ]

y = data.iloc [:, 4 ]


print ( "Input:" , x.iloc [ 0 : 10 ,:])


 Input: Age EstimatedSalary 0 19 19000 1 35 20000 2 26 43000 3 27 57000 4 19 76000 5 27 58000 6 27 84000 7 32 150000 8 25 33000 9 35 65000 

  Code: Split dataset for training and testing.

# data splitting

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split (

x, y, test_size = 0.3 , random_state = 0 )

Code: random forest classifier

# classifier

from sklearn.ensemble import RandomForestClassifier

classifier = RandomForestClassifier (n_estimators = 400 )

# advanced training (x_train, y_train)


pred = classifier.predict (x_test)

Code: Finding the accuracy classifier.

# Performance Model

from sklearn.metrics import accuracy_score

print ( " Accuracy : " , accuracy_score (y_test, pred) *   100 )


 Accuracy: 91.66666666666666 

Random model

the number of points in the range from 0 to the total number of data points in the dataset. The y-axis was stored as the total number of points for which the dependent variable from our dataset has a result of 1. A random plot can be understood as a linearly increasing relationship. An example is a model that predicts whether a product was purchased (positive result) by each person in a group of people (classifying parameter) based on factors such as their gender, age, income, etc. If group members are contacted randomly, the total number of products sold will grow linearly to a maximum value corresponding to the total number of buyers in the group. This distribution is called a "random" CAP

Code: random model

# code for random plot

import matplotlib.pyplot as plt

import numpy as np

# test data length

total = len (y_test)

# Counting 1 marks in test data

one_count = np. sum (y_test)

# counting tags & # 39; 0 & # 39; in test data

zero_count = total - one_count


plt.figure (figsize = ( 10 , 6 ))

# x-axis ranges from 0 to the total number of people contacted
# Y-axis ranges from 0 to total positives.


plt.plot ([ 0 , total], [ 0 , one_count], c = ’b’

  linestyle = ’ --’ , label = ’Random Model’ )

plt.legend ()


Random forest classifier line

Code: The random forest classification algorithm is applied to the set data for line plot of random classifier .

lm = [y for _, y in sorted ( zip (pred, y_test ), reverse = True )]

x = np.arange ( 0 , total + 1 )

y = np.append ([ 0 ], np.cumsum (lm))

plt.plot (x, y, c = ’b’ , label = ’Random classif ier’ , linewidth = 2 )


Explanation: pred — it is a prediction made by a random classifier. We pack the predicted and test values ​​and sort them in reverse order so that the higher values ​​come first and then the lower values. We only extract the y_test values ​​from the array and store them in lm np.cumsum () creates an array of values ​​by cumulatively adding all previous values ​​in the array to the current value. The x values ​​will range from 0 to a total of +1. We are adding one to the common reason arange () does do not include one in the array and we want the x-axis to be in the range 0 to the grand total.

Ideal model

Then we build the ideal plot (or ideal line). An accurate forecast determines exactly which group members will buy a product so that the maximum number of products sold will be reached with the minimum number of calls. The result is a curve on the CAP curve that stays flat after reaching the maximum (contact with everyone else in the group will not increase sales), which is a “perfect” CAP .

plt.plot ([ 0 , one_count, total], [ 0 , one_count, one_count],

c = ’gray’ , linewidth = 2 , label = ’Perfect Model’ )


Explanation: the ideal model finds positive results in the same number of attempts as and the number of positive results. In our dataset, there are only 41 positive results, and therefore in exactly 41 the maximum is reached.


In any case, our classifier algorithm should not create the line that lies under the random line. This is considered a really bad model in this case. Since the plotted line of the classifier is close to the ideal line, we can say that our model fits really well. Take an area under the ideal area and name it AP. Take the area under the forecasting model and name it AP . Then take the ratio as aR / aP . This ratio is called Accuracy . The closer the value is to 1, the better the model. This is one way to analyze it.

Another way to analyze — project a line about 50% off the axis in the prediction model and project it onto the y-axis. Let’s say we get the projection value as X%.

 -" 60%: it is a really bad model -" 60% "X "70%: it is still a bad model but better than the first case obviously -" 70% "X "80%: it is a good model -" 80% "X "90%: it is a very good model -" 90% "X "100%: it is extraordinarily good and might be one of the overfitting cases. 

Thus, according to this analysis, we can determine how accurate our model is. 
Link: —


Learn programming in R: courses


Best Python online courses for 2022


Best laptop for Fortnite


Best laptop for Excel


Best laptop for Solidworks


Best laptop for Roblox


Best computer for crypto mining


Best laptop for Sims 4


Latest questions


Common xlabel/ylabel for matplotlib subplots

12 answers


How to specify multiple return types using type-hints

12 answers


Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers


Flake8: Ignore specific warning for entire file

12 answers


glob exclude pattern

12 answers


How to avoid HTTP error 429 (Too Many Requests) python

12 answers


Python CSV error: line contains NULL byte

12 answers


csv.Error: iterator should return strings, not bytes

12 answers



Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python


How to specify multiple return types using type-hints


Printing words vertically in Python


Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries


Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically