240317 Intro(시간별 사기거래)

Author

김보람

Published

March 17, 2024

import pandas as pd
import numpy as np
import sklearn
import pickle 
import time 
import datetime
import warnings
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
from ipywidgets import interact, widgets
# import graft
with open('./fraudTrain.pkl', 'rb') as file:
    fraudTrain = pickle.load(file)    
df = fraudTrain[fraudTrain.is_fraud == 1]

fraud1_cc_num = df['cc_num'].unique()

df_fraud = fraudTrain[fraudTrain['cc_num'].isin(fraud1_cc_num)].reset_index()

cc_num_value_sort = df_fraud.groupby("cc_num")["is_fraud"].agg(['sum']).reset_index().sort_values(by='sum',ascending=False)['cc_num'].tolist()
import matplotlib.pyplot as plt
from ipywidgets import interact, widgets

def plot_fraud_over_time(cc_num=4.503100e+18):
    plt.figure(figsize=(10, 6))
    data = df_fraud[df_fraud['cc_num'] == cc_num]
    fraud_count = (data['is_fraud'] == 1).sum()
    
    plt.scatter(data[data['is_fraud'] == 1]['trans_date_trans_time'], data[data['is_fraud'] == 1]['is_fraud'], marker='o',s=300,alpha=0.1, color='red', label='Fraudulent Transactions')
    plt.scatter(data[data['is_fraud'] == 0]['trans_date_trans_time'], data[data['is_fraud'] == 0]['is_fraud'], marker='o',s=300,alpha=0.005, color='blue', label='Legitimate Transactions')
    plt.title(f'Fraudulent Transactions Over Time \n cc_num: {cc_num}\n Fraudulent Count: {fraud_count}')
    plt.xlabel('Transaction Date and Time')
    plt.ylabel('Fraudulent Transactions')
    plt.ylim(-0.1, 1.1)
    plt.legend(loc='center right') 
    plt.show()


interact(plot_fraud_over_time, cc_num=widgets.Dropdown(options=[''] + cc_num_value_sort, value=4.503100e+18, description='cc_num:'))
<function __main__.plot_fraud_over_time(cc_num=4.5031e+18)>
import matplotlib.pyplot as plt
from ipywidgets import interact, widgets

def plot_fraud_over_time(cc_num=180068000000000.0):
    plt.figure(figsize=(10, 6))
    data = df_fraud[df_fraud['cc_num'] == cc_num]
    fraud_count = (data['is_fraud'] == 1).sum()
    
    plt.scatter(data[data['is_fraud'] == 1]['trans_date_trans_time'], data[data['is_fraud'] == 1]['is_fraud'], marker='o', s=300, alpha=0.1, color='red', label='Fraudulent Transactions')
    plt.scatter(data[data['is_fraud'] == 0]['trans_date_trans_time'], data[data['is_fraud'] == 0]['is_fraud'], marker='o', s=300, alpha=0.005, color='blue', label='Legitimate Transactions')
    plt.title(f'Fraudulent Transactions Over Time \n cc_num: {cc_num}\n Fraudulent Count: {fraud_count}')
    plt.xlabel('Transaction Date and Time')
    plt.ylabel('Fraudulent Transactions')
    plt.ylim(-0.1, 1.1)
    plt.legend(loc='center right') 

    # Save the plot as a PDF
    plt.savefig('fraudulent_transactions.pdf', format='pdf')
    
    plt.show()

interact(plot_fraud_over_time, cc_num=widgets.Dropdown(options=[''] + cc_num_value_sort, value=180068000000000, description='cc_num:'))
<function __main__.plot_fraud_over_time(cc_num=180068000000000.0)>
import pickle


def save_plot_function(plot_function, filename):
    with open(filename, 'wb') as f:
        pickle.dump(plot_function, f)


save_plot_function(plot_fraud_over_time, 'plot_fraud_over_time.pkl')

print("시각화 함수를 plot_fraud_over_time.pkl 파일로 저장했습니다.")
시각화 함수를 plot_fraud_over_time.pkl 파일로 저장했습니다.
import plotly.graph_objects as go
from ipywidgets import widgets, interact
from IPython.display import display

def plot_fraud_over_time(cc_num):
    data = df_fraud[df_fraud['cc_num'] == cc_num]
    fraud_count = (data['is_fraud'] == 1).sum()
    fig = go.Figure()

    fig.add_trace(go.Scatter(x=data[data['is_fraud'] == 1]['trans_date_trans_time'], 
                             y=data[data['is_fraud'] == 1]['is_fraud'], 
                             mode='markers', 
                             marker=dict(color='red'),
                             name='Fraudulent Transactions'))

    fig.add_trace(go.Scatter(x=data[data['is_fraud'] == 0]['trans_date_trans_time'], 
                             y=data[data['is_fraud'] == 0]['is_fraud'], 
                             mode='markers', 
                             marker=dict(color='blue'),
                             name='Legitimate Transactions'))

    
    fig.update_layout(title=f'Fraudulent Transactions Over Time \n cc_num: {cc_num}\n Fraudulent Count: {fraud_count}',
                      xaxis_title='Transaction Date and Time',
                      yaxis_title='Fraudulent Transactions')


    fig.show()

cc_num_dropdown = widgets.Dropdown(
    options=cc_num_value_sort,
    value=cc_num_value_sort[0], 
    description='cc_num:'
)


#display(cc_num_dropdown)

interact(plot_fraud_over_time, cc_num=cc_num_dropdown)
<function __main__.plot_fraud_over_time(cc_num)>