help@rskworld.in +91 93305 39277
RSK World
  • Home
  • Development
    • Web Development
    • Mobile Apps
    • Software
    • Games
    • Project
  • Technologies
    • Data Science
    • AI Development
    • Cloud Development
    • Blockchain
    • Cyber Security
    • Dev Tools
    • Testing Tools
  • Blog
  • About
  • Contact

Theme Settings

Color Scheme
Display Options
Font Size
100%
Back to Project
RSK World
fraud-detection
RSK World
fraud-detection
Fraud Detection Dataset - Financial Fraud ML + Anti-Fraud AI + Fraud Detection Deep Learning
fraud-detection
  • __pycache__
  • .gitignore866 B
  • ADVANCED_FEATURES.md10.6 KB
  • ERROR_CHECK_REPORT.md1.8 KB
  • GITHUB_RELEASE_GUIDE.md4.6 KB
  • LICENSE1.6 KB
  • README.md8.2 KB
  • RELEASE_NOTES.md2.8 KB
  • advanced_feature_engineering.py9.5 KB
  • feature_engineering.py9.2 KB
  • fraud_detection_analysis.ipynb12.8 KB
  • fraud_detection_dataset.csv2.3 MB
  • generate_data.py9.8 KB
  • hyperparameter_tuning.py9.8 KB
  • index.html12.3 KB
  • model_evaluation_advanced.py9.9 KB
  • predict_pipeline.py8.1 KB
  • requirements.txt462 B
  • shap_explainability.py7.4 KB
  • test_imports.py2.6 KB
  • train_model.py12.4 KB
  • verify_dataset.py1 KB
README.mdtest_imports.pyREADME.mdRELEASE_NOTES.mdadvanced_feature_engineering.pyQUICKSTART.mdverify_dataset.pypreview-generator.htmlfraud_detection_analysis.ipynb
test_imports.py
Raw Download
Find: Go to:
"""
Test all imports to check for errors

Developer: Molla Samser
Designer & Tester: Rima Khatun
Website: https://rskworld.in
Email: help@rskworld.in, support@rskworld.in, info@rskworld.com
Phone: +91 93305 39277
Company: RSK World
"""

import sys

def test_imports():
    """Test all module imports"""
    errors = []
    
    print("Testing module imports...")
    print("="*50)
    
    # Test basic imports
    modules = [
        'pandas',
        'numpy',
        'sklearn',
        'matplotlib',
        'seaborn',
        'joblib'
    ]
    
    for module in modules:
        try:
            __import__(module)
            print(f"[OK] {module}")
        except ImportError as e:
            errors.append(f"{module}: {e}")
            print(f"[ERROR] {module}: {e}")
    
    # Test optional imports
    print("\nTesting optional imports...")
    optional_modules = [
        ('xgboost', 'xgboost'),
        ('lightgbm', 'lightgbm'),
        ('shap', 'shap'),
        ('imblearn', 'imblearn')
    ]
    
    for display_name, module_name in optional_modules:
        try:
            __import__(module_name)
            print(f"[OK] {display_name}")
        except ImportError:
            print(f"[OPTIONAL] {display_name} (not installed - optional)")
    
    # Test project modules
    print("\nTesting project modules...")
    project_modules = [
        'advanced_feature_engineering',
        'model_evaluation_advanced',
        'predict_pipeline',
        'shap_explainability'
    ]
    
    for module in project_modules:
        try:
            __import__(module)
            print(f"[OK] {module}")
        except ImportError as e:
            errors.append(f"{module}: {e}")
            print(f"[ERROR] {module}: {e}")
    
    # Test hyperparameter_tuning separately (requires imblearn)
    print("\nTesting hyperparameter_tuning (requires imblearn)...")
    try:
        import imblearn
        try:
            import hyperparameter_tuning
            print("[OK] hyperparameter_tuning")
        except ImportError as e:
            errors.append(f"hyperparameter_tuning: {e}")
            print(f"[ERROR] hyperparameter_tuning: {e}")
    except ImportError:
        print("[OPTIONAL] hyperparameter_tuning (imblearn not installed - optional)")
    
    print("\n" + "="*50)
    if errors:
        print(f"Found {len(errors)} error(s):")
        for error in errors:
            print(f"  - {error}")
        return False
    else:
        print("All imports successful!")
        return True

if __name__ == "__main__":
    success = test_imports()
    sys.exit(0 if success else 1)

99 lines•2.6 KB
python
README.md
Raw Download

README.md

# Fraud Detection Dataset

<!--
Developer: Molla Samser
Designer & Tester: Rima Khatun
Website: https://rskworld.in
Email: help@rskworld.in, support@rskworld.in, info@rskworld.com
Phone: +91 93305 39277
Company: RSK World
Description: Financial fraud detection dataset with transaction records, user behavior patterns, and fraud labels for building anti-fraud ML models.
-->

Financial fraud detection dataset with transaction records, user behavior patterns, and fraud labels for building anti-fraud ML models.

## Description

This dataset contains transaction records with features like transaction amount, location, time, merchant information, and fraud labels. Perfect for building fraud detection models, anomaly detection, and financial security applications.

## Features

- **Transaction records** - Comprehensive transaction data
- **User behavior features** - Advanced behavioral patterns
- **Fraud labels** - Binary classification labels
- **Imbalanced dataset handling** - Realistic 5% fraud ratio
- **Ready for classification models** - Preprocessed and structured
- **Advanced feature engineering** - Time-based, statistical, and interaction features
- **Multiple ML models** - Random Forest, XGBoost, LightGBM support

## Technologies

- CSV, Excel
- Pandas, NumPy
- Scikit-learn, XGBoost, LightGBM
- SHAP (for model explainability)
- SMOTE (for imbalanced data handling)

## Dataset Structure

### Basic Features
- `transaction_id`: Unique identifier for each transaction
- `user_id`: User identifier
- `amount`: Transaction amount
- `merchant_category`: Category of the merchant
- `location`: Transaction location
- `timestamp`: Transaction timestamp
- `device_type`: Device used for transaction
- `user_age`: Age of the user
- `account_age_days`: Age of the account in days
- `transaction_count_24h`: Number of transactions in last 24 hours
- `avg_transaction_amount`: Average transaction amount
- `is_foreign_transaction`: Whether transaction is from foreign location
- `is_weekend`: Whether transaction occurred on weekend
- `hour_of_day`: Hour of the day (0-23)
- `is_fraud`: Fraud label (0 = Normal, 1 = Fraud)

### Advanced Features (Auto-generated)
- **Time-based features**: day_of_week, month, is_month_end, is_month_start, quarter
- **Transaction velocity**: time_since_last_transaction, transactions_per_hour, transactions_per_day
- **Statistical features**: amount_zscore, amount_percentile, amount_deviation_from_avg
- **Rolling statistics**: amount_rolling_mean_7d, amount_rolling_std_7d, amount_rolling_max_7d
- **Change indicators**: location_changed, device_changed, merchant_category_changed
- **Risk scoring**: risk_score (composite risk indicator)
- **Interaction features**: amount_x_transaction_count, amount_x_is_foreign, etc.
- **Time patterns**: is_rush_hour, is_off_hours, is_business_hours
- **Behavioral patterns**: avg_amount_ratio, transaction_velocity
- **Account features**: account_age_months, is_new_account, is_mature_account

## Installation

```bash
pip install -r requirements.txt
```

## Usage

### 1. Generate the dataset:
```bash
python generate_data.py
```

### 2. Engineer advanced features (optional):
```bash
python advanced_feature_engineering.py
```

### 3. Explore the data:
```bash
jupyter notebook fraud_detection_analysis.ipynb
```

### 4. Train models:
```bash
# Basic training
python train_model.py

# The script will automatically:
# - Use advanced feature engineering
# - Train multiple models (Random Forest, XGBoost, LightGBM)
# - Compare model performance
# - Generate evaluation plots
```

## Advanced Features

### 1. Advanced Feature Engineering (`advanced_feature_engineering.py`)
Comprehensive feature engineering module that creates:
- **Time-based features**: day_of_week, month, quarter, is_month_end, is_month_start
- **Time patterns**: is_rush_hour, is_off_hours, is_business_hours
- **Statistical features**: amount_zscore, amount_percentile, amount_deviation_from_avg
- **Rolling statistics**: amount_rolling_mean_7d, amount_rolling_std_7d, amount_rolling_max_7d
- **Transaction velocity**: transaction_velocity, is_high_velocity
- **Change indicators**: location_changed, device_changed
- **Risk scoring**: risk_score (composite risk indicator)
- **Interaction features**: amount_x_transaction_count, amount_x_is_foreign, amount_x_hour
- **Account features**: account_age_months, is_new_account, is_mature_account
- **User behavior patterns**: user_avg_amount, user_std_amount, amount_deviation_from_user_avg

### 2. Hyperparameter Tuning (`hyperparameter_tuning.py`)
- Automated hyperparameter optimization using RandomizedSearchCV
- Supports Random Forest, XGBoost, and LightGBM
- Cross-validation for robust parameter selection
- Automatic best model selection and saving
- Results exported to CSV for analysis

### 3. Advanced Model Evaluation (`model_evaluation_advanced.py`)
Comprehensive evaluation with:
- Multiple metrics: Accuracy, Precision, Recall, F1, ROC-AUC, Average Precision
- Additional metrics: Log Loss, Matthews Correlation Coefficient, Cohen's Kappa
- Cross-validation with multiple scoring metrics
- ROC curve comparison across models
- Precision-Recall curve analysis
- Feature importance comparison
- Metrics visualization and comparison plots

### 4. Model Explainability (`shap_explainability.py`)
SHAP (SHapley Additive exPlanations) integration:
- SHAP summary plots
- SHAP waterfall plots for individual predictions
- Feature importance from SHAP values
- Model interpretation and explainability

### 5. Prediction Pipeline (`predict_pipeline.py`)
Production-ready prediction system:
- Batch prediction from CSV files
- Single transaction prediction
- Risk level classification (Low/Medium/High)
- Probability scores
- Ready for deployment

### 6. Model Training (`train_model.py`)
Training script with:
- **Random Forest**: Robust ensemble method with balanced class weights
- **XGBoost**: Gradient boosting with advanced regularization
- **LightGBM**: Fast gradient boosting framework
- Automatic model comparison and best model selection
- SMOTE for handling imbalanced data
- Comprehensive evaluation metrics

## Difficulty Level

Intermediate to Advanced

## Project Structure

```
fraud-detection/
├── fraud_detection_dataset.csv # Generated dataset
├── generate_data.py # Dataset generation script
├── advanced_feature_engineering.py # Advanced feature engineering
├── train_model.py # Model training script
├── hyperparameter_tuning.py # Hyperparameter optimization
├── model_evaluation_advanced.py # Advanced evaluation metrics
├── shap_explainability.py # SHAP model explainability
├── predict_pipeline.py # Production prediction pipeline
├── fraud_detection_analysis.ipynb # Jupyter notebook for analysis
├── verify_dataset.py # Dataset verification script
├── requirements.txt # Python dependencies
├── README.md # This file
├── index.html # Demo page
└── .gitignore # Git ignore file
```

## Model Outputs

After training and evaluation, the following files may be generated:
- `fraud_detection_model.pkl` - Best trained model
- `best_tuned_model_*.pkl` - Best tuned model from hyperparameter optimization
- `confusion_matrix.png` - Confusion matrix visualization
- `roc_curve.png` - ROC curve comparison
- `feature_importance.png` - Feature importance plot
- `hyperparameter_tuning_results.csv` - Hyperparameter tuning results
- `fraud_detection_dataset_advanced.csv` - Dataset with advanced features
- `shap_summary.png` - SHAP summary plot (if SHAP is used)
- `shap_summary_bar.png` - SHAP summary bar plot

## Contact

For questions or support, please contact:
- **Website**: https://rskworld.in
- **Email**: help@rskworld.in, support@rskworld.in
- **Phone**: +91 93305 39277

## License

Content used for educational purposes only.

## Credits

- **Developer**: Molla Samser
- **Designer & Tester**: Rima Khatun
- **Company**: RSK World
RELEASE_NOTES.md
Raw Download

RELEASE_NOTES.md

# Release v1.0.0 - Fraud Detection Dataset

**Developer:** Molla Samser
**Designer & Tester:** Rima Khatun
**Website:** https://rskworld.in
**Company:** RSK World

## 🎉 Initial Release

Complete fraud detection dataset project with advanced machine learning features.

## ✨ Features

### Dataset
- **10,000 transactions** with realistic fraud patterns
- **15 basic features** + **20+ advanced engineered features**
- **5% fraud ratio** for realistic imbalanced dataset
- CSV and Excel formats available

### Advanced Feature Engineering
- Time-based features (day of week, month, quarter, time patterns)
- Statistical features (z-scores, percentiles, deviations)
- Rolling statistics (7-day windows)
- Interaction features
- Risk scoring composite feature
- User behavior patterns
- Account maturity indicators

### Machine Learning Models
- **Random Forest** - Robust ensemble method
- **XGBoost** - Gradient boosting with regularization
- **LightGBM** - Fast gradient boosting framework
- Automatic model comparison and selection

### Advanced Features
- Hyperparameter tuning with RandomizedSearchCV
- Comprehensive evaluation metrics (ROC-AUC, F1, Precision, Recall, MCC, etc.)
- SHAP explainability support
- SMOTE for imbalanced data handling
- Production-ready prediction pipeline

### Tools & Scripts
- `generate_data.py` - Dataset generation
- `advanced_feature_engineering.py` - Feature engineering
- `train_model.py` - Model training
- `hyperparameter_tuning.py` - Parameter optimization
- `model_evaluation_advanced.py` - Evaluation metrics
- `shap_explainability.py` - Model explainability
- `predict_pipeline.py` - Production prediction pipeline
- `fraud_detection_analysis.ipynb` - Jupyter notebook for analysis

### Documentation
- Comprehensive README.md
- Advanced Features documentation
- Error check reports
- Usage examples

## 📦 Installation

```bash
pip install -r requirements.txt
```

## 🚀 Quick Start

```bash
# Generate dataset
python generate_data.py

# Train models
python train_model.py

# Hyperparameter tuning
python hyperparameter_tuning.py
```

## 📊 Dataset Statistics

- Total Transactions: 10,000
- Fraudulent: 500 (5%)
- Normal: 9,500 (95%)
- Features: 15 basic + 20+ advanced
- Format: CSV, Excel

## 🔧 Technologies

- Python 3.8+
- Pandas, NumPy
- Scikit-learn
- XGBoost, LightGBM
- SHAP (optional)
- SMOTE (imbalanced-learn)
- Matplotlib, Seaborn
- Jupyter Notebook

## 📝 License

Content used for educational purposes only.

## 🔗 Links

- **Website:** https://rskworld.in
- **Email:** help@rskworld.in, support@rskworld.in
- **Phone:** +91 93305 39277

## 🙏 Credits

- **Developer:** Molla Samser
- **Designer & Tester:** Rima Khatun
- **Company:** RSK World

advanced_feature_engineering.py
Raw Download
Find: Go to:
"""
Advanced Feature Engineering for Fraud Detection

Developer: Molla Samser
Designer & Tester: Rima Khatun
Website: https://rskworld.in
Email: help@rskworld.in, support@rskworld.in, info@rskworld.com
Phone: +91 93305 39277
Company: RSK World
Description: Advanced feature engineering including time-based, statistical, and interaction features
"""

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

def engineer_advanced_features(df):
    """
    Create advanced features for fraud detection
    
    Parameters:
    -----------
    df : pd.DataFrame
        Input dataset with basic features
    
    Returns:
    --------
    pd.DataFrame
        Dataset with additional advanced features
    """
    print("Engineering advanced features...")
    df_eng = df.copy()
    
    # Convert timestamp to datetime if needed
    if 'timestamp' in df_eng.columns:
        if not pd.api.types.is_datetime64_any_dtype(df_eng['timestamp']):
            df_eng['timestamp'] = pd.to_datetime(df_eng['timestamp'])
        
        # Time-based features
        df_eng['day_of_week'] = df_eng['timestamp'].dt.dayofweek
        df_eng['month'] = df_eng['timestamp'].dt.month
        df_eng['quarter'] = df_eng['timestamp'].dt.quarter
        df_eng['is_month_end'] = df_eng['timestamp'].dt.is_month_end.astype(int)
        df_eng['is_month_start'] = df_eng['timestamp'].dt.is_month_start.astype(int)
        df_eng['day_of_month'] = df_eng['timestamp'].dt.day
        
        # Time patterns
        df_eng['is_rush_hour'] = ((df_eng['hour_of_day'] >= 7) & (df_eng['hour_of_day'] <= 9) | 
                                  (df_eng['hour_of_day'] >= 17) & (df_eng['hour_of_day'] <= 19)).astype(int)
        df_eng['is_off_hours'] = ((df_eng['hour_of_day'] >= 0) & (df_eng['hour_of_day'] <= 5) | 
                                  (df_eng['hour_of_day'] >= 22)).astype(int)
        df_eng['is_business_hours'] = ((df_eng['hour_of_day'] >= 9) & (df_eng['hour_of_day'] <= 17)).astype(int)
    
    # Statistical features for amounts
    if 'amount' in df_eng.columns:
        df_eng['amount_zscore'] = (df_eng['amount'] - df_eng['amount'].mean()) / df_eng['amount'].std()
        df_eng['amount_percentile'] = df_eng['amount'].rank(pct=True)
        
        # Amount deviation from user average
        if 'user_id' in df_eng.columns and 'avg_transaction_amount' in df_eng.columns:
            df_eng['amount_deviation_from_avg'] = df_eng['amount'] - df_eng['avg_transaction_amount']
            df_eng['amount_ratio_to_avg'] = df_eng['amount'] / (df_eng['avg_transaction_amount'] + 1e-6)
        
        # High-value transaction flag
        amount_95th = df_eng['amount'].quantile(0.95)
        df_eng['is_high_value'] = (df_eng['amount'] > amount_95th).astype(int)
    
    # Account age features
    if 'account_age_days' in df_eng.columns:
        df_eng['account_age_months'] = df_eng['account_age_days'] / 30.0
        df_eng['is_new_account'] = (df_eng['account_age_days'] < 30).astype(int)
        df_eng['is_mature_account'] = (df_eng['account_age_days'] > 365).astype(int)
    
    # Transaction velocity features
    if 'transaction_count_24h' in df_eng.columns:
        df_eng['transaction_velocity'] = df_eng['transaction_count_24h'] / 24.0
        df_eng['is_high_velocity'] = (df_eng['transaction_count_24h'] > df_eng['transaction_count_24h'].quantile(0.90)).astype(int)
    
    # Interaction features
    if 'amount' in df_eng.columns:
        if 'transaction_count_24h' in df_eng.columns:
            df_eng['amount_x_transaction_count'] = df_eng['amount'] * df_eng['transaction_count_24h']
        if 'is_foreign_transaction' in df_eng.columns:
            df_eng['amount_x_is_foreign'] = df_eng['amount'] * df_eng['is_foreign_transaction']
        if 'hour_of_day' in df_eng.columns:
            df_eng['amount_x_hour'] = df_eng['amount'] * df_eng['hour_of_day']
    
    # Risk scoring (composite feature)
    risk_score = 0
    
    if 'is_foreign_transaction' in df_eng.columns:
        risk_score += df_eng['is_foreign_transaction'] * 0.2
    if 'is_off_hours' in df_eng.columns:
        risk_score += df_eng['is_off_hours'] * 0.15
    if 'is_high_value' in df_eng.columns:
        risk_score += df_eng['is_high_value'] * 0.15
    if 'is_new_account' in df_eng.columns:
        risk_score += df_eng['is_new_account'] * 0.1
    if 'is_high_velocity' in df_eng.columns:
        risk_score += df_eng['is_high_velocity'] * 0.2
    if 'amount_zscore' in df_eng.columns:
        risk_score += np.abs(df_eng['amount_zscore']) * 0.1
    
    df_eng['risk_score'] = risk_score
    
    # User behavior patterns
    if 'user_id' in df_eng.columns and 'amount' in df_eng.columns:
        user_stats = df_eng.groupby('user_id')['amount'].agg(['mean', 'std', 'count']).reset_index()
        user_stats.columns = ['user_id', 'user_avg_amount', 'user_std_amount', 'user_total_transactions']
        df_eng = df_eng.merge(user_stats, on='user_id', how='left')
        
        # Fill NaN values
        df_eng['user_std_amount'] = df_eng['user_std_amount'].fillna(0)
        
        # Deviation from user's normal behavior
        if 'user_avg_amount' in df_eng.columns:
            df_eng['amount_deviation_from_user_avg'] = df_eng['amount'] - df_eng['user_avg_amount']
    
    # Location and device stability
    if 'user_id' in df_eng.columns:
        if 'location' in df_eng.columns:
            user_locations = df_eng.groupby('user_id')['location'].nunique().reset_index()
            user_locations.columns = ['user_id', 'user_unique_locations']
            df_eng = df_eng.merge(user_locations, on='user_id', how='left')
            df_eng['location_changed'] = (df_eng['user_unique_locations'] > 1).astype(int)
        
        if 'device_type' in df_eng.columns:
            user_devices = df_eng.groupby('user_id')['device_type'].nunique().reset_index()
            user_devices.columns = ['user_id', 'user_unique_devices']
            df_eng = df_eng.merge(user_devices, on='user_id', how='left')
            df_eng['device_changed'] = (df_eng['user_unique_devices'] > 1).astype(int)
        
        if 'merchant_category' in df_eng.columns:
            user_merchants = df_eng.groupby('user_id')['merchant_category'].nunique().reset_index()
            user_merchants.columns = ['user_id', 'user_unique_merchants']
            df_eng = df_eng.merge(user_merchants, on='user_id', how='left')
    
    # Rolling statistics (if timestamp is available and sorted)
    if 'timestamp' in df_eng.columns and 'amount' in df_eng.columns and 'user_id' in df_eng.columns:
        try:
            df_eng_sorted = df_eng.sort_values(['user_id', 'timestamp']).copy()
            df_eng_sorted['amount_rolling_mean_7d'] = df_eng_sorted.groupby('user_id')['amount'].transform(
                lambda x: x.rolling(window=7, min_periods=1).mean()
            )
            df_eng_sorted['amount_rolling_std_7d'] = df_eng_sorted.groupby('user_id')['amount'].transform(
                lambda x: x.rolling(window=7, min_periods=1).std()
            )
            df_eng_sorted['amount_rolling_max_7d'] = df_eng_sorted.groupby('user_id')['amount'].transform(
                lambda x: x.rolling(window=7, min_periods=1).max()
            )
            
            # Merge back
            df_eng = df_eng_sorted.sort_index()
        except:
            print("Warning: Could not compute rolling statistics")
    
    print(f"Advanced features created. Total features: {df_eng.shape[1]}")
    return df_eng

def get_feature_importance_categories():
    """
    Return feature categories for analysis
    
    Returns:
    --------
    dict
        Dictionary mapping feature categories to feature names
    """
    return {
        'basic': ['amount', 'user_age', 'account_age_days', 'transaction_count_24h', 
                 'avg_transaction_amount', 'is_foreign_transaction', 'is_weekend', 'hour_of_day'],
        'time_based': ['day_of_week', 'month', 'quarter', 'is_month_end', 'is_month_start',
                      'is_rush_hour', 'is_off_hours', 'is_business_hours'],
        'statistical': ['amount_zscore', 'amount_percentile', 'amount_deviation_from_avg',
                       'amount_ratio_to_avg', 'amount_rolling_mean_7d', 'amount_rolling_std_7d'],
        'interaction': ['amount_x_transaction_count', 'amount_x_is_foreign', 'amount_x_hour'],
        'behavioral': ['transaction_velocity', 'is_high_velocity', 'risk_score',
                      'amount_deviation_from_user_avg'],
        'account': ['account_age_months', 'is_new_account', 'is_mature_account'],
        'user_patterns': ['user_avg_amount', 'user_std_amount', 'user_total_transactions',
                         'location_changed', 'device_changed']
    }

if __name__ == "__main__":
    # Test the feature engineering
    import pandas as pd
    
    print("Testing advanced feature engineering...")
    print("Developer: Molla Samser")
    print("Website: https://rskworld.in")
    
    # Load sample data
    df = pd.read_csv('fraud_detection_dataset.csv')
    print(f"\nOriginal shape: {df.shape}")
    
    # Engineer features
    df_eng = engineer_advanced_features(df)
    print(f"Engineered shape: {df_eng.shape}")
    print(f"\nNew features: {df_eng.shape[1] - df.shape[1]}")
    print(f"\nNew columns: {[col for col in df_eng.columns if col not in df.columns]}")
    
    # Save engineered dataset
    df_eng.to_csv('fraud_detection_dataset_advanced.csv', index=False)
    print("\nEngineered dataset saved to fraud_detection_dataset_advanced.csv")

206 lines•9.5 KB
python
verify_dataset.py
Raw Download
Find: Go to:
"""
Dataset Verification Script

Developer: Molla Samser
Designer & Tester: Rima Khatun
Website: https://rskworld.in
Email: help@rskworld.in, support@rskworld.in, info@rskworld.com
Phone: +91 93305 39277
Company: RSK World
Description: Verifies the generated fraud detection dataset
"""

import pandas as pd

# Load dataset
df = pd.read_csv('fraud_detection_dataset.csv')

print("="*50)
print("DATASET VERIFICATION")
print("Developer: Molla Samser")
print("Website: https://rskworld.in")
print("="*50)
print(f"\nDataset shape: {df.shape}")
print(f"Columns: {list(df.columns)}")
print(f"\nFraud ratio: {df['is_fraud'].mean():.2%}")
print(f"Fraudulent transactions: {df['is_fraud'].sum()}")
print(f"Normal transactions: {(df['is_fraud'] == 0).sum()}")
print("\nSample data:")
print(df.head(5))
print("\nDataset info:")
print(df.info())
print("\nDataset statistics:")
print(df.describe())
print(f"\nTotal features: {len(df.columns)}")
print("\nAll features:")
for i, col in enumerate(df.columns, 1):
    print(f"{i:2d}. {col}")

39 lines•1 KB
python
fraud_detection_analysis.ipynb
Raw Download
Find: Go to:
{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Fraud Detection Dataset - Data Analysis\n",
        "\n",
        "<!--\n",
        "    Developer: Molla Samser\n",
        "    Designer & Tester: Rima Khatun\n",
        "    Website: https://rskworld.in\n",
        "    Email: help@rskworld.in, support@rskworld.in, info@rskworld.com\n",
        "    Phone: +91 93305 39277\n",
        "    Company: RSK World\n",
        "    Description: Comprehensive analysis of fraud detection dataset\n",
        "-->\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Developer: Molla Samser\n",
        "# Designer & Tester: Rima Khatun\n",
        "# Website: https://rskworld.in\n",
        "# Email: help@rskworld.in, support@rskworld.in, info@rskworld.com\n",
        "# Phone: +91 93305 39277\n",
        "# Company: RSK World\n",
        "\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.preprocessing import LabelEncoder\n",
        "from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score\n",
        "from imblearn.over_sampling import SMOTE\n",
        "import warnings\n",
        "warnings.filterwarnings('ignore')\n",
        "\n",
        "# Set style\n",
        "plt.style.use('seaborn-v0_8-darkgrid')\n",
        "sns.set_palette('husl')\n",
        "%matplotlib inline\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. Load Data\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Load dataset\n",
        "df = pd.read_csv('fraud_detection_dataset.csv')\n",
        "print(f\"Dataset shape: {df.shape}\")\n",
        "df.head()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. Data Exploration\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Basic information\n",
        "print(\"Dataset Info:\")\n",
        "df.info()\n",
        "print(\"\\n\" + \"=\"*50)\n",
        "print(\"Dataset Statistics:\")\n",
        "df.describe()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Check for missing values\n",
        "print(\"Missing Values:\")\n",
        "print(df.isnull().sum())\n",
        "print(f\"\\nTotal missing values: {df.isnull().sum().sum()}\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Fraud distribution\n",
        "fraud_counts = df['is_fraud'].value_counts()\n",
        "print(\"Fraud Distribution:\")\n",
        "print(fraud_counts)\n",
        "print(f\"\\nFraud percentage: {df['is_fraud'].mean()*100:.2f}%\")\n",
        "\n",
        "# Visualize\n",
        "plt.figure(figsize=(8, 6))\n",
        "fraud_counts.plot(kind='bar', color=['green', 'red'])\n",
        "plt.title('Fraud vs Normal Transactions')\n",
        "plt.xlabel('Is Fraud (0=Normal, 1=Fraud)')\n",
        "plt.ylabel('Count')\n",
        "plt.xticks(rotation=0)\n",
        "plt.grid(axis='y', alpha=0.3)\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. Feature Analysis\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Transaction amount analysis\n",
        "plt.figure(figsize=(14, 5))\n",
        "\n",
        "plt.subplot(1, 2, 1)\n",
        "df[df['is_fraud'] == 0]['amount'].hist(bins=50, alpha=0.7, label='Normal', color='green')\n",
        "df[df['is_fraud'] == 1]['amount'].hist(bins=50, alpha=0.7, label='Fraud', color='red')\n",
        "plt.xlabel('Transaction Amount')\n",
        "plt.ylabel('Frequency')\n",
        "plt.title('Transaction Amount Distribution')\n",
        "plt.legend()\n",
        "plt.grid(alpha=0.3)\n",
        "\n",
        "plt.subplot(1, 2, 2)\n",
        "df.boxplot(column='amount', by='is_fraud', ax=plt.gca())\n",
        "plt.xlabel('Is Fraud')\n",
        "plt.ylabel('Transaction Amount')\n",
        "plt.title('Transaction Amount by Fraud Status')\n",
        "plt.suptitle('')\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Categorical features analysis\n",
        "fig, axes = plt.subplots(2, 2, figsize=(16, 12))\n",
        "\n",
        "# Merchant category\n",
        "merchant_fraud = pd.crosstab(df['merchant_category'], df['is_fraud'], normalize='index') * 100\n",
        "merchant_fraud.plot(kind='bar', ax=axes[0, 0], color=['green', 'red'])\n",
        "axes[0, 0].set_title('Fraud Rate by Merchant Category')\n",
        "axes[0, 0].set_xlabel('Merchant Category')\n",
        "axes[0, 0].set_ylabel('Percentage')\n",
        "axes[0, 0].legend(['Normal', 'Fraud'])\n",
        "axes[0, 0].tick_params(axis='x', rotation=45)\n",
        "\n",
        "# Device type\n",
        "device_fraud = pd.crosstab(df['device_type'], df['is_fraud'], normalize='index') * 100\n",
        "device_fraud.plot(kind='bar', ax=axes[0, 1], color=['green', 'red'])\n",
        "axes[0, 1].set_title('Fraud Rate by Device Type')\n",
        "axes[0, 1].set_xlabel('Device Type')\n",
        "axes[0, 1].set_ylabel('Percentage')\n",
        "axes[0, 1].legend(['Normal', 'Fraud'])\n",
        "axes[0, 1].tick_params(axis='x', rotation=45)\n",
        "\n",
        "# Foreign transaction\n",
        "foreign_fraud = pd.crosstab(df['is_foreign_transaction'], df['is_fraud'], normalize='index') * 100\n",
        "foreign_fraud.plot(kind='bar', ax=axes[1, 0], color=['green', 'red'])\n",
        "axes[1, 0].set_title('Fraud Rate by Foreign Transaction')\n",
        "axes[1, 0].set_xlabel('Is Foreign Transaction')\n",
        "axes[1, 0].set_ylabel('Percentage')\n",
        "axes[1, 0].legend(['Normal', 'Fraud'])\n",
        "axes[1, 0].set_xticklabels(['No', 'Yes'], rotation=0)\n",
        "\n",
        "# Hour of day\n",
        "hour_fraud = pd.crosstab(df['hour_of_day'], df['is_fraud'], normalize='index') * 100\n",
        "hour_fraud[1].plot(kind='line', ax=axes[1, 1], marker='o', color='red')\n",
        "axes[1, 1].set_title('Fraud Rate by Hour of Day')\n",
        "axes[1, 1].set_xlabel('Hour of Day')\n",
        "axes[1, 1].set_ylabel('Fraud Percentage')\n",
        "axes[1, 1].grid(True, alpha=0.3)\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. Correlation Analysis\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Select numeric columns for correlation\n",
        "numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()\n",
        "corr_matrix = df[numeric_cols].corr()\n",
        "\n",
        "# Plot correlation matrix\n",
        "plt.figure(figsize=(12, 10))\n",
        "sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0, \n",
        "            square=True, linewidths=1, cbar_kws={\"shrink\": .8}, fmt='.2f')\n",
        "plt.title('Correlation Matrix')\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 5. Model Building\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Preprocess data\n",
        "df_model = df.copy()\n",
        "\n",
        "# Encode categorical variables\n",
        "label_encoders = {}\n",
        "categorical_cols = ['merchant_category', 'location', 'device_type', 'user_id']\n",
        "\n",
        "for col in categorical_cols:\n",
        "    le = LabelEncoder()\n",
        "    df_model[col] = le.fit_transform(df_model[col].astype(str))\n",
        "    label_encoders[col] = le\n",
        "\n",
        "# Prepare features and target\n",
        "X = df_model.drop(['transaction_id', 'is_fraud'], axis=1, errors='ignore')\n",
        "y = df_model['is_fraud']\n",
        "\n",
        "print(f\"Features shape: {X.shape}\")\n",
        "print(f\"Target distribution:\\n{y.value_counts()}\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Handle imbalanced data with SMOTE\n",
        "X_balanced, y_balanced = SMOTE(random_state=42).fit_resample(X, y)\n",
        "\n",
        "print(f\"After SMOTE - Features shape: {X_balanced.shape}\")\n",
        "print(f\"After SMOTE - Target distribution:\\n{pd.Series(y_balanced).value_counts()}\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Train-test split\n",
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "    X_balanced, y_balanced, test_size=0.2, random_state=42, stratify=y_balanced\n",
        ")\n",
        "\n",
        "print(f\"Training set size: {X_train.shape[0]}\")\n",
        "print(f\"Test set size: {X_test.shape[0]}\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Train Random Forest model\n",
        "model = RandomForestClassifier(\n",
        "    n_estimators=100,\n",
        "    max_depth=20,\n",
        "    min_samples_split=5,\n",
        "    min_samples_leaf=2,\n",
        "    random_state=42,\n",
        "    n_jobs=-1,\n",
        "    class_weight='balanced'\n",
        ")\n",
        "\n",
        "model.fit(X_train, y_train)\n",
        "\n",
        "# Predictions\n",
        "y_pred = model.predict(X_test)\n",
        "y_pred_proba = model.predict_proba(X_test)[:, 1]\n",
        "\n",
        "print(\"Model trained successfully!\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Model evaluation\n",
        "print(\"Classification Report:\")\n",
        "print(classification_report(y_test, y_pred))\n",
        "\n",
        "print(\"\\nConfusion Matrix:\")\n",
        "cm = confusion_matrix(y_test, y_pred)\n",
        "print(cm)\n",
        "\n",
        "# Visualize confusion matrix\n",
        "plt.figure(figsize=(8, 6))\n",
        "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', \n",
        "            xticklabels=['Normal', 'Fraud'],\n",
        "            yticklabels=['Normal', 'Fraud'])\n",
        "plt.title('Confusion Matrix')\n",
        "plt.ylabel('True Label')\n",
        "plt.xlabel('Predicted Label')\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Feature importance\n",
        "feature_importance = pd.DataFrame({\n",
        "    'feature': X.columns,\n",
        "    'importance': model.feature_importances_\n",
        "}).sort_values('importance', ascending=False)\n",
        "\n",
        "print(\"Top 15 Most Important Features:\")\n",
        "print(feature_importance.head(15))\n",
        "\n",
        "# Visualize\n",
        "plt.figure(figsize=(10, 8))\n",
        "top_features = feature_importance.head(15)\n",
        "sns.barplot(data=top_features, y='feature', x='importance')\n",
        "plt.title('Top 15 Feature Importances')\n",
        "plt.xlabel('Importance')\n",
        "plt.tight_layout()\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 6. Conclusion\n",
        "\n",
        "This analysis demonstrates:\n",
        "- Data exploration and visualization\n",
        "- Handling of imbalanced datasets\n",
        "- Model training and evaluation\n",
        "- Feature importance analysis\n",
        "\n",
        "For more information, visit: https://rskworld.in\n"
      ]
    }
  ],
  "metadata": {
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
398 lines•12.8 KB
json
🚀 Support RSK World

Subscribe to our YouTube channel for latest tutorials & updates!



Click subscribe & support our work ❤️

About RSK World

Founded by Molla Samser, with Designer & Tester Rima Khatun, RSK World is your one-stop destination for free programming resources, source code, and development tools.

Founder: Molla Samser
Designer & Tester: Rima Khatun

Development

  • Game Development
  • Web Development
  • Mobile Development
  • AI Development
  • Development Tools

Legal

  • Terms & Conditions
  • Privacy Policy
  • Disclaimer

Contact Info

Nutanhat, Mongolkote
Purba Burdwan, West Bengal
India, 713147

+91 93305 39277

hello@rskworld.in
support@rskworld.in

© 2026 RSK World. All rights reserved.

Content used for educational purposes only. View Disclaimer