Created by DALL-E
Anomali tespiti, çeşitli veri setlerinde normalden sapmaların, olağandışı olayların veya beklenmeyen desenlerin belirlenmesi sürecidir. Bu tür anomaliler, finans, sağlık, siber güvenlik, üretim ve daha birçok alanda kritik öneme sahiptir. Son yıllarda, Derin Öğrenme teknikleri, özellikle Convolutional Neural Networks (CNN) ve Recurrent Neural Networks (RNN), anomali tespiti görevlerinde etkileyici sonuçlar elde etmiştir. Bu makalede, CNN ve RNN’lerin farklı türlerdeki veri setlerinde anomali tespiti için nasıl kullanılabileceği ele alınacaktır.
CNN’ler, özellikle görüntü verilerinin analizinde ve işlenmesinde oldukça etkilidir. CNN’ler, görüntülerdeki özellikleri otomatik olarak öğrenebilir ve bu sayede anomali tespiti görevlerinde kullanılabilir. Örneğin, bir üretim hattında üretilen parçaların kalite kontrolü sırasında, normal ve kusurlu parçaların görüntüleri kullanılarak bir CNN modeli eğitilebilir. Model, normal parçaların özelliklerini öğrenir ve bu özelliklerden sapma gösteren parçaları anomali olarak belirler.
Geleneksel olarak CNN’ler, zaman serisi verileriyle doğrudan ilişkili değildir, ancak 1D Convolutional Neural Networks kullanarak zaman serisi verileri üzerinde de etkili anomali tespiti yapılabilir. Bu yaklaşımda, zaman serisi verileri 1D konvolüsyon katmanları kullanılarak işlenir ve anomaliler tespit edilir. Örneğin, finansal zaman serisi verilerinde ani fiyat değişiklikleri veya siber güvenlik alanında ağ trafiğindeki olağandışı etkinlikler bu şekilde tespit edilebilir.
RNN’ler, özellikle zaman serisi verileri ve ardışık veri noktalarının analizi için uygundur. RNN’ler, önceki zaman adımlarındaki bilgileri hatırlayarak gelecekteki adımları tahmin edebilir. Bu özellikleri sayesinde, anomali tespitinde de etkili bir şekilde kullanılabilirler. Örneğin, üretim süreçlerinde kullanılan makinelerin sensör verileri analiz edilerek anomali tespiti yapılabilir. LSTM (Long Short-Term Memory) ve GRU (Gated Recurrent Unit) gibi gelişmiş RNN türleri, uzun süreli bağımlılıkları daha iyi öğrenerek daha hassas anomali tespiti sağlar.
RNN’ler, dil modelleri ve metin verileri üzerinde de güçlüdür. Doğal dil işleme (NLP) alanında, metin verilerindeki anomalilerin tespiti, sahte haberlerin tespiti veya spam e-posta filtrasyonu gibi uygulamalar için RNN’ler kullanılabilir. Model, normal dil kullanımını öğrenir ve bu normdan sapma gösteren metinleri anomali olarak işaretler.
Bazı durumlarda, CNN ve RNN’nin birlikte kullanılması, daha etkili anomali tespiti sağlayabilir. Özellikle video verileri gibi hem zamansal hem de mekansal bilgileri içeren verilerde, CNN-RNN kombinasyonları oldukça başarılıdır. Örneğin, güvenlik kameralarından gelen video akışlarında, CNN katmanları görüntülerdeki mekansal özellikleri öğrenirken, RNN katmanları zamansal bağımlılıkları öğrenir. Bu sayede, videolardaki anormal hareketler veya olaylar daha etkili bir şekilde tespit edilebilir.
CNN ve RNN tabanlı anomali tespiti, sağlık alanında teşhis ve hasta takibi için kullanılabilir. Örneğin, MRI veya CT taramaları gibi tıbbi görüntülerdeki anormalliklerin tespiti veya hastaların vital bulgularındaki anormal değişikliklerin izlenmesi.
Finansal piyasalarda, hileli işlemlerin tespiti veya borsa fiyatlarındaki ani dalgalanmaların belirlenmesi için bu yöntemler kullanılabilir.
Ağ trafiğindeki olağandışı etkinliklerin tespiti, siber saldırıların önlenmesi ve güvenlik ihlallerinin erken uyarı sistemleri ile belirlenmesi için CNN ve RNN modelleri kullanılabilir.
Üretim hatlarındaki makinelerin sensör verileri analiz edilerek, olası arızaların önceden tespiti ve bakım süreçlerinin optimize edilmesi sağlanabilir.
CNN ve RNN tabanlı anomali tespiti, çeşitli veri türlerinde ve uygulama alanlarında büyük potansiyele sahiptir. Her iki model türü de kendine özgü avantajlara sahiptir ve belirli senaryolarda bir arada kullanılarak daha kapsamlı ve etkili anomali tespiti sağlanabilir. Gelecekte, bu alandaki gelişmeler, daha hassas ve güvenilir anomali tespit sistemlerinin geliştirilmesine katkıda bulunacaktır.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
# Normal veri oluşturma
np.random.seed(42)
normal_data = np.sin(np.linspace(0, 50, 1000)) + np.random.normal(0, 0.5, 1000)
# Anomali veri ekleme
anomaly_data = normal_data.copy()
anomaly_data[600:620] += 5 # Anomali ekleme
# Veriyi pandas DataFrame'e çevirme
data = pd.DataFrame(anomaly_data, columns=['value'])
data['timestamp'] = pd.date_range(start='1/1/2020', periods=len(data), freq='H')
data.set_index('timestamp', inplace=True)
# Veriyi görselleştirme
plt.figure(figsize=(15, 5))
plt.plot(data.index, data['value'])
plt.title("Zaman Serisi Verisi (Anomaliler İçerir)")
plt.xlabel("Zaman")
plt.ylabel("Değer")
plt.show()
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
def create_dataset(data, time_step=1):
X, y = [], []
for i in range(len(data)-time_step-1):
a = data[i:(i+time_step), 0]
X.append(a)
y.append(data[i + time_step, 0])
return np.array(X), np.array(y)
time_step = 10
X, y = create_dataset(scaled_data, time_step)
X = X.reshape(X.shape[0], X.shape[1], 1)
train_size = int(len(X) * 0.67)
test_size = len(X) - train_size
X_train, X_test = X[0:train_size], X[train_size:len(X)]
y_train, y_test = y[0:train_size], y[train_size:len(y)]
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test), verbose=1)
train_predict = model.predict(X_train)
test_predict = model.predict(X_test)
# Veriyi eski ölçeğine döndürme
train_predict = scaler.inverse_transform(train_predict)
test_predict = scaler.inverse_transform(test_predict)
y_train = scaler.inverse_transform([y_train])
y_test = scaler.inverse_transform([y_test])
# Hata hesaplama
train_error = np.abs(y_train[0] - train_predict[:, 0])
test_error = np.abs(y_test[0] - test_predict[:, 0])
# Anomali tespiti
threshold = 1.0
anomalies_train = train_error > threshold
anomalies_test = test_error > threshold
# Görselleştirme
plt.figure(figsize=(15, 5))
plt.plot(data.index[:len(y_train[0])], y_train[0], label='Gerçek (Eğitim)')
plt.plot(data.index[:len(y_train[0])], train_predict[:, 0], label='Tahmin (Eğitim)')
plt.scatter(data.index[:len(y_train[0])][anomalies_train], y_train[0][anomalies_train], color='red', label='Anomaliler (Eğitim)')
plt.title("Eğitim Verisi ve Anomaliler")
plt.xlabel("Zaman")
plt.ylabel("Değer")
plt.legend()
plt.show()
plt.figure(figsize=(15, 5))
plt.plot(data.index[len(y_train[0]):], y_test[0], label='Gerçek (Test)')
plt.plot(data.index[len(y_train[0]):], test_predict[:, 0], label='Tahmin (Test)')
plt.scatter(data.index[len(y_train[0]):][anomalies_test], y_test[0][anomalies_test], color='red', label='Anomaliler (Test)')
plt.title("Test Verisi ve Anomaliler")
plt.xlabel("Zaman")
plt.ylabel("Değer")
plt.legend()
plt.show()
Bu örnek kod, LSTM tabanlı bir model kullanarak zaman serisi verilerinde anomalileri tespit etmeyi göstermektedir. Veriyi ölçeklendirdik, modelimizi eğittik ve ardından tahminler yaparak anomalileri belirledik. Aynı yaklaşım, CNN tabanlı modeller ve diğer veri türleri için de uyarlanabilir.