Ideas de modelado matemático de la Copa Huashu 2023 - Caso: Detección de anomalías

Ideas de preguntas

(Compartir en CSDN tan pronto como salgan las preguntas de la competencia)

https://blog.csdn.net/dc_sinor?type=blog

1. Introducción: sobre la detección de anomalías

Detección de anomalías (detección de valores atípicos) en los siguientes escenarios:

  • Preprocesamiento de datos
  • Detección de virus troyanos
  • Pruebas de productos de fabricación industrial
  • Inspección de tráfico de red

Espera, hay un papel importante. Dado que en los escenarios anteriores, la cantidad de datos anormales es una pequeña parte, los algoritmos de clasificación como SVM y la regresión logística no son aplicables porque:

El algoritmo de aprendizaje supervisado es adecuado para una gran cantidad de muestras positivas y una gran cantidad de muestras negativas, hay suficientes muestras para que el algoritmo aprenda sus características y las nuevas muestras en el futuro son consistentes con la distribución de muestras de entrenamiento.

El siguiente es el ámbito de aplicación de los algoritmos relacionados con la detección de anomalías y el aprendizaje supervisado:

detección anormal

  • Fraude de tarjeta de credito
  • Detección anormal de productos de fabricación.
  • Detección de anomalías en la máquina del centro de datos
  • detección de intrusos

aprendizaje supervisado

  • Identificación de correo no deseado
  • categorías de noticias

2. Algoritmo de detección de anomalías

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

import tushare
from matplotlib import pyplot as plt
 
df = tushare.get_hist_data("600680")
v = df[-90: ].volume
v.plot("kde")
plt.show()

En los últimos tres meses, si el volumen de transacciones es superior a 200.000, puede considerarse anormal

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. Análisis de diagrama de caja

import tushare
from matplotlib import pyplot as plt
 
df = tushare.get_hist_data("600680")
v = df[-90: ].volume
v.plot("kde")
plt.show()

inserte la descripción de la imagen aquí
En general, se puede saber que si el volumen de negociación de las acciones es inferior a 20,000, o el volumen de negociación es superior a 80,000, ¡debe estar más atento!

3. Basado en distancia/densidad

Un algoritmo típico es: "Algoritmo de factor de valor atípico local-Factor de valor atípico local", que introduce "k-distancia, k-ésima distancia", "k-distancia vecindad, k-ésima distancia vecindad", "distancia de alcance, distancia alcanzable" y "densidad de accesibilidad local, densidad de alcance local" y "factor de valor atípico local, factor de valor atípico local" para encontrar valores atípicos.

Siéntalo visualmente, como se muestra en la Figura 2, para los puntos del conjunto C1, el espaciado, la densidad y la dispersión generales son relativamente uniformes y pueden considerarse como el mismo grupo; para los puntos del conjunto C2, también pueden ser considerado como un conglomerado. Los puntos o1 y o2 están relativamente aislados y pueden considerarse puntos anormales o puntos discretos. La pregunta ahora es cómo darse cuenta de la generalidad del algoritmo, que puede satisfacer la identificación de valores atípicos de C1 y C2, que tienen distribuciones de densidad muy diferentes. LOF puede lograr nuestro objetivo.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

4. Basado en la idea de división

Un algoritmo típico es "Bosque de Aislamiento, Bosque de Aislamiento", la idea es:

Supongamos que usamos un hiperplano aleatorio para dividir (split) el espacio de datos (espacio de datos), un corte puede generar dos subespacios (imagínese cortar un pastel en dos con un cuchillo). Después de eso, continuamos usando un hiperplano aleatorio para cortar cada subespacio y el ciclo continúa hasta que solo hay un punto de datos en cada subespacio. Intuitivamente hablando, podemos encontrar que esos cúmulos con alta densidad pueden cortarse muchas veces antes de que dejen de cortarse, pero esos puntos con baja densidad pueden detenerse fácilmente en un subespacio muy temprano.

El flujo del algoritmo de esto es el proceso de usar el hiperplano para dividir el subespacio y luego construir un árbol binario similar:

inserte la descripción de la imagen aquí

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

rng = np.random.RandomState(42)

# Generate train data
X = 0.3 * rng.randn(100, 2)
X_train = np.r_[X + 1, X - 3, X - 5, X + 6]
# Generate some regular novel observations
X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 1, X - 3, X - 5, X + 6]
# Generate some abnormal novel observations
X_outliers = rng.uniform(low=-8, high=8, size=(20, 2))

# fit the model
clf = IsolationForest(max_samples=100*2, random_state=rng)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_test)
y_pred_outliers = clf.predict(X_outliers)

# plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-8, 8, 50), np.linspace(-8, 8, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.title("IsolationForest")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)

b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='white')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='green')
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red')
plt.axis('tight')
plt.xlim((-8, 8))
plt.ylim((-8, 8))
plt.legend([b1, b2, c],
           ["training observations",
            "new regular observations", "new abnormal observations"],
           loc="upper left")
plt.show()

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/dc_sinor/article/details/132008609
Recomendado
Clasificación