Shashank2k3 commited on
Commit
e369950
·
verified ·
1 Parent(s): f492aa8

Upload 3 files

Browse files
Files changed (3) hide show
  1. README.md +49 -3
  2. classifier.pkl +3 -0
  3. fpd1.py +39 -0
README.md CHANGED
@@ -1,3 +1,49 @@
1
- ---
2
- license: apache-2.0
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Fake Profile Detection
2
+ # 🚨 Fake Instagram Profile Detection using Machine Learning
3
+
4
+ This project is a real-time Instagram profile analyzer that predicts whether a given profile is **fake** or **real** using machine learning. It uses profile metrics like follower count, following count, post count, and verification status to make predictions.
5
+
6
+ ---
7
+
8
+ ## 📌 How It Works
9
+
10
+ - You enter an Instagram **username**.
11
+ - The application uses the **Apify API** to fetch public profile data.
12
+ - It extracts key features such as:
13
+ - Number of followers
14
+ - Number of followings
15
+ - Number of posts
16
+ - Is the account private?
17
+ - Is the account verified?
18
+ - These features are passed into a pre-trained **machine learning model** (`classifier.pkl`) to predict whether the profile is real or fake.
19
+
20
+ ---
21
+
22
+ ## 🛠 Technologies Used
23
+
24
+ - **Python**
25
+ - **Streamlit** – for building the web app
26
+ - **Joblib** – for loading the ML model
27
+ - **Apify API** – to scrape Instagram data
28
+ - **Scikit-learn** – for training the ML model
29
+ - **Pandas, NumPy** – for data manipulation
30
+
31
+ ---
32
+
33
+ ## 🧠 ML Model
34
+
35
+ The model is trained using a labeled dataset containing Instagram profile attributes. The classification is binary:
36
+ - `0` → Likely Fake
37
+ - `1` → Likely Real
38
+
39
+ The training includes feature normalization and multiple algorithm trials like Logistic Regression, Decision Trees, and Random Forests. The final deployed model is chosen based on accuracy and generalization.
40
+
41
+ ---
42
+
43
+ ## 🖥️ Project UI
44
+
45
+ - The app is built with **Streamlit** for a clean and interactive interface.
46
+ - Users simply input a **username** and click **Predict**.
47
+ - Output shows the profile’s stats and the prediction result with appropriate messaging (Success/Error).
48
+
49
+ ---
classifier.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3b2ad437a3a0a74a8f793b60926ac67c57912c9a4bc08d9cb480e99cc8662d09
3
+ size 413195
fpd1.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import streamlit as st
4
+ import joblib
5
+ from apify_client import ApifyClient
6
+ model = joblib.load("classifier.pkl")
7
+ client = ApifyClient("apify_api_nscRkHOyMh3mytIWftXpHpZlIzBhgF4mZyPV")
8
+ st.title("Fake Instagram Profile Detection")
9
+ st.write("Plaese provide instagram account details you would like to predict")
10
+ n = st.text_input("Enter username ")
11
+ run_input = { "usernames": [n] }
12
+ run = client.actor("dSCLg0C3YEZ83HzYX").call(run_input=run_input)
13
+ m = client.dataset(run["defaultDatasetId"])
14
+ for item in m.iterate_items():
15
+ postsCount= item.get('postsCount')
16
+ followersCount = item.get('followersCount')
17
+ followsCount = item.get('followsCount')
18
+ private=item.get('private')
19
+ verified=item.get('verified')
20
+
21
+ def predictor(postsCount,followersCount,followsCount,private,verified):
22
+ prediction = model.predict([[postsCount,followersCount,followsCount,private,verified]])
23
+ print(prediction)
24
+ return prediction
25
+
26
+
27
+ if st.button("Predict"):
28
+ result = predictor(postsCount,followersCount,followsCount,private,verified)
29
+ st.write("The number of posts : " , postsCount)
30
+ st.write("The number of followers : " ,followersCount)
31
+ st.write("The number of following : " ,followsCount)
32
+ st.write("Private : " ,private)
33
+ st.write("Verified : " ,verified)
34
+ if postsCount == None:
35
+ st.error("The User Doesn't exist")
36
+ elif result == 0 and postsCount != None:
37
+ st.error("The Account is Likely to be Fake ")
38
+ else:
39
+ st.success("The Account is Likely to be Real")