tiktok-bot-detection / inference_example.py
nahiar's picture
Upload tiktok-bot-detection model
2e8c34c verified
"""
Example inference script for TikTok Bot Detection Model
"""
import joblib
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
def load_model(model_path="TIKTOK_BOT_Detection_Model_v1.pkl"):
"""Load the trained bot detection model"""
return joblib.load(model_path)
def prepare_features(account_data):
"""
Prepare account features for prediction
Args:
account_data (dict): Dictionary containing account features
Returns:
numpy.ndarray: Scaled features ready for prediction
"""
features = [
"IsPrivate",
"IsVerified",
"HasProfilePic",
"FollowingCount",
"FollowerCount",
"HasInstagram",
"HasYoutube",
"HasBio",
"HasLinkInBio",
"HasPosts",
"PostsCount",
"FollowToFollowerRatio",
]
df = pd.DataFrame([account_data])
# Scale features
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df[features])
return df_scaled
def predict_single_account(model, account_data):
"""
Predict if a single account is a bot
Args:
model: Trained sklearn model
account_data (dict): Account features
Returns:
dict: Prediction results with probabilities
"""
features_scaled = prepare_features(account_data)
prediction = model.predict(features_scaled)[0]
probability = model.predict_proba(features_scaled)[0]
return {
"is_bot": bool(prediction),
"bot_probability": float(probability[1]),
"human_probability": float(probability[0]),
"confidence": float(max(probability)),
}
def predict_batch(model, accounts_df):
"""
Predict for multiple accounts at once
Args:
model: Trained sklearn model
accounts_df (pd.DataFrame): DataFrame with account features
Returns:
pd.DataFrame: Original data with predictions added
"""
features = [
"IsPrivate",
"IsVerified",
"HasProfilePic",
"FollowingCount",
"FollowerCount",
"HasInstagram",
"HasYoutube",
"HasBio",
"HasLinkInBio",
"HasPosts",
"PostsCount",
"FollowToFollowerRatio",
]
scaler = MinMaxScaler()
features_scaled = scaler.fit_transform(accounts_df[features])
predictions = model.predict(features_scaled)
probabilities = model.predict_proba(features_scaled)
accounts_df["is_bot"] = predictions
accounts_df["bot_probability"] = probabilities[:, 1]
accounts_df["human_probability"] = probabilities[:, 0]
return accounts_df
# Example usage
if __name__ == "__main__":
# Load model
print("Loading TikTok bot detection model...")
model = load_model()
print("✓ Model loaded successfully!\n")
# Example 1: Single account prediction
print("=" * 60)
print("Example 1: Single Account Prediction")
print("=" * 60)
suspicious_account = {
"IsPrivate": 0,
"IsVerified": 0,
"HasProfilePic": 1,
"FollowingCount": 5000,
"FollowerCount": 100,
"HasInstagram": 0,
"HasYoutube": 0,
"HasBio": 0,
"HasLinkInBio": 1,
"HasPosts": 1,
"PostsCount": 50,
"FollowToFollowerRatio": 50.0,
}
result = predict_single_account(model, suspicious_account)
print(f"Account Analysis:")
print(f" Following: {suspicious_account['FollowingCount']}")
print(f" Followers: {suspicious_account['FollowerCount']}")
print(f" Posts: {suspicious_account['PostsCount']}")
print(f"\nPrediction:")
print(f" Is Bot: {result['is_bot']}")
print(f" Bot Probability: {result['bot_probability']:.2%}")
print(f" Confidence: {result['confidence']:.2%}")
# Example 2: Batch prediction
print(f"\n{'='*60}")
print("Example 2: Batch Prediction")
print("=" * 60)
accounts = pd.DataFrame(
[
{
"IsPrivate": 0,
"IsVerified": 1,
"HasProfilePic": 1,
"FollowingCount": 500,
"FollowerCount": 10000,
"HasInstagram": 1,
"HasYoutube": 1,
"HasBio": 1,
"HasLinkInBio": 1,
"HasPosts": 1,
"PostsCount": 200,
"FollowToFollowerRatio": 0.05,
},
{
"IsPrivate": 0,
"IsVerified": 0,
"HasProfilePic": 0,
"FollowingCount": 8000,
"FollowerCount": 50,
"HasInstagram": 0,
"HasYoutube": 0,
"HasBio": 0,
"HasLinkInBio": 1,
"HasPosts": 1,
"PostsCount": 10,
"FollowToFollowerRatio": 160.0,
},
]
)
results = predict_batch(model, accounts.copy())
print("\nResults:")
for idx, row in results.iterrows():
print(f"\nAccount {idx + 1}:")
print(f" Followers: {row['FollowerCount']}")
print(f" Is Bot: {bool(row['is_bot'])}")
print(f" Bot Probability: {row['bot_probability']:.2%}")