Tratar con un tamaño de conjunto de características altamente variable
Estoy intentando usar el aprendizaje automático para la clasificación de eventos de seguridad. Mi objetivo es predecir el resultado (verdadero positivo o falso positivo) de un evento específico. Un evento tiene un conjunto de variables, llamadas observables. Estos pueden ser URL, direcciones IP, hashes de archivos, etc. (8 tipos en total). Sin embargo, un evento podría contener una pequeña cantidad de observables o también una gran cantidad. Como quiero predecir el resultado en función de estos observables, el tamaño de mi característica varía en longitud, entre 1 y 2500. Esto en un ejemplo del conjunto de datos:
['user1', '1.1.1.1', 'explorer.exe', NULL, NULL, NULL ...]
['google.com', 'msword.exe', NULL, NULL, NULL ...]
['user3', '1.1.1.9', 'explorer.exe', 'e0d123e5f316bef78bfdf5a008837577', 'http://google.com, NULL ...]
¿Cómo puedo manejar este escenario? Me gustaría probar una clasificación, así como redes neuronales también para comparar.
Editar
Terminé usando el enfoque de la Bolsa de palabras, ya que los "observables" que mencioné podrían interpretarse como palabras en un documento. A partir de ahí, mi caso es un problema de clasificación de texto relativamente conocido y obtuve buenos resultados con los algoritmos Naive Bayes y la vectorización hash.
Respuestas
Antes de pensar en qué tipo de algoritmo podría usar, pensaría en cómo preprocesar correctamente sus datos. Dependiendo de cuántos valores posibles tenga para cada uno de sus 8 tipos posibles (si lo entendí correctamente), podría construir un conjunto de datos de 0 y 1, es decir, indicando la presencia o ausencia de cada valor posible en cada evento.
Esto lo llevaría a tener una matriz dispersa, pero eso es algo con lo que puede lidiar con algunas herramientas, un buen ejemplo posiblemente esté en este enlace
Conclusión:
- Primero trataría de identificar si hay valores posibles fijos para cada uno de sus tipos (¿creando grupos de ips por región? ¿Hay un número fijo de posibles .exe, urls ...?)
- preprocesar sus datos, para que http://google.comy google.com tienen el mismo valor (es decir, al eliminar http: // de las URL)
- si cree que el número de valores posibles no es ridículamente grande, puede intentar construir la matriz dispersa
Después de esto, podría pensar en qué tipo de algoritmo aplicar, y no volverse loco por una red neuronal desde el principio.
Estoy de acuerdo con German CM, hay cierta estructura en sus datos aunque no están completamente estructurados. Entonces, la primera tarea es transformar los datos en características que puedan ser explotadas por ML. Esta es la típica ingeniería de características: la idea es intentar organizar los diferentes tipos de elementos en los datos de una manera susceptible de proporcionar indicaciones útiles al algoritmo. Muchos algoritmos de aprendizaje pueden lidiar con valores perdidos, por lo que la ausencia de un tipo particular de información no es necesariamente un problema. Por supuesto que es difícil dar consejos precisos ya que esta etapa requiere conocimientos expertos.
Tenga en cuenta que técnicamente hay métodos que toman como entrada tales secuencias de longitud variable, pero es muy poco probable que funcione bien si el algoritmo tiene que adivinar todo por sí mismo.