Menú

Sistemas recomendadores: teorema de Bayes y clasificador ingenuo de Bayes. Clasificador de documentos Naive Bayes en Excel Grupos de indicadores para evaluar el estado de salud de la población.

frutas y bayas

Estadísticas- una ciencia que estudia el lado cuantitativo de los fenómenos y procesos socioeconómicos de masas, en inextricable unidad con su lado cualitativo en condiciones específicas de lugar y tiempo.

En las ciencias naturales, el concepto de "estadística" significa el análisis de fenómenos de masas basado en la aplicación de métodos de la teoría de la probabilidad.

La estadística desarrolla una metodología especial para la investigación y el procesamiento de materiales: observaciones estadísticas masivas, método de agrupaciones, valores medios, índices, método de equilibrio, método de imágenes gráficas.

Metodológico características es el estudio de: la naturaleza masiva de los fenómenos, signos cualitativamente homogéneos de un fenómeno particular en dinámica.

Las estadísticas incluyen un número secciones, incluyendo: teoría general de la estadística, estadísticas económicas, estadísticas sectoriales: industrial, agrícola, de transporte, médica.

11. Grupos de indicadores para evaluar el estado de salud de la población.

La salud de la población se caracteriza por tres grupos de indicadores principales:

A) médicos y demográficos – reflejan el estado y la dinámica de los procesos demográficos:

    Estadísticas de población (densidad, distribución, composición social, composición por género y edad, alfabetización, educación, nacionalidad, idioma, cultura).

    Dinámica de la población (emigración e inmigración mecánica, fertilidad natural, mortalidad, aumento natural).

    Estado civil (tasa de matrimonio, tasa de divorcios, duración media del matrimonio).

    Procesos de reproducción (fecundidad total, coeficiente bruto y coeficiente neto).

    Esperanza de vida media

    Mortalidad (estructura de la mortalidad, tasas de mortalidad según la causa, naturaleza de la morbilidad y edad).

B) indicadores de morbilidad y lesiones (morbilidad primaria, prevalencia, morbilidad acumulada, incidencia patológica, índice de salud, mortalidad, lesiones, discapacidad).

C) indicadores de desarrollo físico:

    Antropométrico (altura, peso corporal, circunferencia del pecho, cabeza, hombro, antebrazo, parte inferior de la pierna, muslo)

    Fisiométrico (capacidad vital de los pulmones, fuerza muscular de las manos, fuerza de la columna vertebral)

    Somatoscópico (físico, desarrollo muscular, grado de gordura, forma del pecho, forma de las piernas, pies, gravedad de los caracteres sexuales secundarios).

    Estadísticas médicas, sus secciones, tareas. El papel del método estadístico en el estudio de la salud de la población y el desempeño del sistema de salud.

Estadísticas médicas (sanitarias) - estudia el lado cuantitativo de los fenómenos y procesos relacionados con la medicina, la higiene y la asistencia sanitaria.

Hay 3 secciones de estadísticas médicas:

1. Estadísticas de salud de la población- estudia el estado de salud de la población en su conjunto o de sus grupos individuales (mediante la recopilación y el análisis estadístico de datos sobre el tamaño y la composición de la población, su reproducción, movimiento natural, desarrollo físico, prevalencia de diversas enfermedades, esperanza de vida, etc.). Los indicadores de salud se evalúan en comparación con los niveles de evaluación generalmente aceptados y los niveles obtenidos para diferentes regiones y a lo largo del tiempo.

2. Estadísticas de salud- resuelve cuestiones de recopilación, procesamiento y análisis de información sobre la red de instituciones de salud (su ubicación, equipamiento, actividades) y el personal (el número de médicos, enfermeras y personal médico subalterno, su distribución por especialidad, duración del servicio, su reciclaje, etc. .). Al analizar las actividades de las instituciones terapéuticas y preventivas, los datos obtenidos se comparan con los niveles estándar, así como con los niveles obtenidos en otras regiones y a lo largo del tiempo.

3. Estadísticas clínicas- se trata del uso de métodos estadísticos al procesar los resultados de estudios clínicos, experimentales y de laboratorio; permite, desde un punto de vista cuantitativo, evaluar la confiabilidad de los resultados de la investigación y resolver una serie de otros problemas (determinar el volumen del número requerido de observaciones en un estudio de muestra, formar grupos experimentales y de control, estudiar la presencia de conexiones de correlación y regresión, eliminación de la heterogeneidad cualitativa de los grupos, etc.).

Los objetivos de las estadísticas médicas son:

1) estudio del estado de salud de la población, análisis de características cuantitativas de la salud pública.

2) identificar conexiones entre los indicadores de salud y diversos factores del entorno natural y social, evaluando la influencia de estos factores en los niveles de salud de la población.

3) estudiar materialmente - Base técnica de la atención sanitaria.

4) análisis de las actividades de las instituciones médicas.

5) evaluación de la eficacia (médica, social, económica) de las medidas terapéuticas, preventivas, antiepidémicas en curso y de la asistencia sanitaria en general.

6) el uso de métodos estadísticos en la realización de investigaciones biomédicas clínicas y experimentales.

La estadística médica es un método de diagnóstico social, ya que permite evaluar el estado de salud de la población de un país o región y, a partir de ello, desarrollar medidas encaminadas a mejorar la salud pública. El principio más importante de la estadística es su aplicación al estudio. No fenómenos separados, aislados, sino de masas., con el fin de identificar sus patrones generales. Estos patrones aparecen, por regla general, en una gran cantidad de observaciones, es decir, cuando se estudia una población estadística.

En medicina, la estadística es el método líder porque:

1) le permite medir cuantitativamente los indicadores de salud pública y los indicadores de desempeño de las instituciones médicas

2) determina la fuerza de la influencia de diversos factores en la salud pública

3) determina la efectividad del tratamiento y las actividades recreativas.

4) le permite evaluar la dinámica de los indicadores de salud y le permite predecirlos

5) le permite obtener los datos necesarios para el desarrollo de normas y estándares de atención médica.

    Población estadística. Definición, tipos, propiedades. Características del estudio de una población estadística.

El objeto de cualquier estudio estadístico es una población estadística.

Población estadística- un grupo que consta de muchos elementos relativamente homogéneos, reunidos dentro de ciertos límites de espacio y tiempo y que poseen signos de similitud y diferencia.

Propiedades de una población estadística: 1) homogeneidad de las unidades de observación 2) ciertos límites de espacio y tiempo del fenómeno en estudio

El objeto de la investigación estadística en medicina y atención sanitaria pueden ser diversas poblaciones (la población en su conjunto o sus grupos individuales, enfermos, muertos, nacidos), instituciones médicas, etc.

Hay dos tipos de población estadística. :

a) población general

b) población de muestra

1. La población de muestra se forma de tal manera que brinde igualdad de oportunidades para que todos los elementos de la población original sean cubiertos por la observación.

2. la población de la muestra debe ser representativa, reflejar de forma precisa y completa el fenómeno, es decir dar la misma idea del fenómeno como si se estudiara toda la población.

Población de muestra

1) debe ser representativo, reflejar de forma precisa y completa el fenómeno, es decir dar la misma idea del fenómeno como si se estudiara toda la población, para ello se debe:

A. ser suficiente en número

b. tener las características principales de la población general (todos los elementos deben estar representados en la parte seleccionada en la misma proporción que en la población general)

2) al formarlo se debe observar

1) Selección aleatoria- selección de unidades de observación mediante sorteo utilizando una tabla de números aleatorios, etc. En este caso, cada unidad tiene las mismas oportunidades de ser incluida en la muestra.

2) selección mecánica- las unidades de la población general, ordenadas secuencialmente según alguna característica (alfabéticamente, por fecha de visita al médico, etc.), se dividen en partes iguales; De cada parte, en un orden predeterminado, se selecciona cada 5, 10 o enésima unidad de observación de tal manera que se asegure el tamaño de muestra requerido.

3) típico selección (tipológica): implica la división preliminar obligatoria de la población general en grupos (tipos) separados cualitativamente homogéneos con la posterior selección de unidades de observación de cada grupo de acuerdo con los principios de selección aleatoria o mecánica.

4) de serie Selección (conglomerado, conglomerado): implica el muestreo de la población general, no de unidades individuales, sino de series completas (una colección organizada de unidades de observación, por ejemplo, organizaciones, distritos, etc.)

5) a conjunto métodos: una combinación de diferentes métodos para formar una muestra.

    Población muestral, requisitos para la misma. Principios y métodos para formar una población muestral.

Hay dos tipos de población estadística. :

a) población general- un conjunto formado por todas las unidades de observación que se le pueden atribuir de acuerdo con el objetivo del estudio. Al estudiar la salud pública, la población general suele considerarse dentro de límites territoriales específicos o puede estar limitada por otras características (género, edad, etc.) según el propósito del estudio.

b) población de muestra- parte de la población general, seleccionada mediante un método especial (muestreo) y destinada a caracterizar a la población general.

Características de realizar una investigación estadística sobre una población de muestra:

1. La población de muestra se forma de tal manera que brinde igualdad de oportunidades para que todos los elementos de la población original sean cubiertos por la observación.

2. la población de la muestra debe ser representativa, reflejar de forma precisa y completa el fenómeno, es decir dar la misma idea del fenómeno como si se estudiara toda la población.

Población de muestra- parte de la población general, seleccionada mediante un método especial (muestreo) y destinada a caracterizar a la población general.

Requisitos para la población de muestra:

1) debe ser representativo, reflejar de forma precisa y completa el fenómeno, es decir dar la misma idea del fenómeno como si se estudiara toda la población, para ello se debe:

A. ser suficiente en número

b. tener las características principales de la población general (todos los elementos deben estar representados en la parte seleccionada en la misma proporción que en la población general)

2) al formarlo se debe observar El principio básico de formar una población muestral.: igualdad de oportunidades para cada unidad de observación a ser incluida en el estudio.

Métodos para formar una población estadística:

1) selección aleatoria: selección de unidades de observación mediante sorteo utilizando una tabla de números aleatorios, etc. En este caso, cada unidad tiene las mismas oportunidades de ser incluida en la muestra.

2) selección mecánica: unidades de la población general, ordenadas secuencialmente según alguna característica (alfabéticamente, por fecha de visita al médico, etc.), se dividen en partes iguales; De cada parte, en un orden predeterminado, se selecciona cada 5, 10 o enésima unidad de observación de tal manera que se asegure el tamaño de muestra requerido.

3) selección típica (tipológica): implica la división preliminar obligatoria de la población general en grupos (tipos) separados cualitativamente homogéneos con la posterior selección de unidades de observación de cada grupo de acuerdo con los principios de selección aleatoria o mecánica.

4) selección en serie (conglomerado, conglomerado): implica el muestreo de la población general, no de unidades individuales, sino de una serie completa (una colección organizada de unidades de observación, por ejemplo, organizaciones, distritos, etc.)

5) métodos combinados: una combinación de diferentes métodos para formar una muestra.

La validación cruzada es un método bien conocido para obtener estimaciones de parámetros desconocidos del modelo. La idea principal del método es dividir la muestra de datos en v "pliegues". Los "pliegues" V son submuestras aisladas seleccionadas al azar.

Utilizando un valor fijo de k, se construye un modelo de k vecinos más cercanos para obtener predicciones en el v-ésimo segmento (los segmentos restantes se utilizan como ejemplos) y se estima el error de clasificación. Para problemas de regresión, la suma de cuadrados se utiliza con mayor frecuencia como estimación del error, y para problemas de clasificación es más conveniente considerar la precisión (el porcentaje de observaciones clasificadas correctamente).

Luego, el proceso se repite secuencialmente para todas las opciones posibles v. Una vez agotados v “pliegues” (ciclos), los errores calculados se promedian y se utilizan como medida de la estabilidad del modelo (es decir, una medida de la calidad de la predicción en los puntos de consulta). Los pasos anteriores se repiten para diferentes k, y el valor correspondiente al error más pequeño (o mayor precisión de clasificación) se acepta como óptimo (óptimo en el sentido del método de validación cruzada).

Tenga en cuenta que la validación cruzada es un procedimiento computacional intensivo y es necesario dejar tiempo para que se ejecute el algoritmo, especialmente si el tamaño de la muestra es lo suficientemente grande.

La segunda opción para elegir el valor del parámetro k es establecer su valor usted mismo. Sin embargo, este método debe usarse si existen conjeturas razonables sobre el posible valor del parámetro, como estudios previos de conjuntos de datos similares.

El método de los k vecinos más cercanos muestra resultados bastante buenos en una amplia variedad de problemas.

Un ejemplo de un uso real del método anterior es software Centro de soporte técnico de Dell, desarrollado por Inference. Este sistema ayuda al personal del centro a responder más solicitudes ofreciendo respuestas inmediatas a preguntas comunes y permitiéndoles acceder a la base de datos mientras hablan por teléfono con el usuario. Los empleados del centro de soporte técnico, gracias a la implementación de este método, pueden atender un número importante de llamadas simultáneamente. Software CBR está actualmente implementado en la intranet de Dell.

No hay demasiadas herramientas de minería de datos que implementen el método de k vecinos más cercanos y el método CBR. Entre los más famosos: CBR Express y Case Point (Inference Corp.), Apriori (Answer Systems), DP Umbrella (VYCOR Corp.), KATE Tools (Acknosoft, Francia), Pattern Recognition Workbench (Unica, EE. UU.), así como algunos paquetes estadísticos, por ejemplo, Statistica.

clasificación bayesiana

Nombres alternativos: modelado bayesiano, estadística bayesiana, método de red bayesiano.

Puede obtener más información sobre la clasificación bayesiana en. La clasificación bayesiana se utilizó originalmente para formalización del conocimiento expertos en sistemas expertos, ahora la clasificación bayesiana también se utiliza como uno de los métodos de Minería de Datos.

El llamado enfoque de clasificación ingenua o enfoque ingenuo-bayes es la versión más simple del método que utiliza redes bayesianas. Con este enfoque se resuelven los problemas de clasificación, el resultado del método son los llamados modelos “transparentes”.

La clasificación "ingenua" es un método de clasificación bastante transparente y comprensible. Se llama “ingenuo” porque parte del supuesto de que independencia mutua señales.

Propiedades de la clasificación ingenua:

  1. Usando todas las variables y definiendo todas las dependencias entre ellas.
  2. Teniendo dos supuestos sobre las variables:
    • todas las variables son igualmente importantes;
    • todas las variables son estadísticamente independientes, es decir el valor de una variable no dice nada sobre el valor de otra.

La mayoría de los demás métodos de clasificación suponen que, antes de que comience la clasificación, es igualmente probable que un objeto pertenezca a una clase u otra; Pero esto no siempre es verdad.

Digamos que sabemos que un cierto porcentaje de los datos pertenece a una clase particular. Surge la pregunta: ¿podemos utilizar esta información al construir un modelo de clasificación? Hay muchos ejemplos de la vida real sobre el uso de este conocimiento previo para ayudar a clasificar objetos. Un ejemplo típico de la práctica médica. Si un médico envía los resultados de las pruebas de un paciente para realizar pruebas adicionales, asigna al paciente a una clase específica. ¿Cómo puedes aplicar esta información? Podemos usarlo como datos adicionales al construir un modelo de clasificación.

Se destacan las siguientes ventajas de las redes bayesianas como método de minería de datos:

  • el modelo define las dependencias entre todas las variables, esto facilita el manejo de situaciones en las que se desconocen los valores de algunas variables;
  • Las redes bayesianas se interpretan de manera bastante simple y permiten un análisis sencillo de escenarios hipotéticos en la etapa de modelado predictivo;
  • el método bayesiano permite combinar de forma natural patrones inferidos a partir de datos y, por ejemplo, conocimiento experto obtenido explícitamente;
  • el uso de redes bayesianas evita el problema del sobreajuste, es decir, la complicación excesiva del modelo, que es una debilidad de muchos métodos (por ejemplo, árboles de decisión y redes neuronales).

El enfoque Naive Bayes tiene las siguientes desventajas:

  • Es correcto multiplicar probabilidades condicionales sólo cuando todas las variables de entrada son verdaderamente estadísticamente independientes; aunque este método suele mostrar resultados bastante buenos cuando no se cumple la condición de independencia estadística, teóricamente esta situación debería manejarse mediante métodos más complejos basados ​​en el entrenamiento de redes bayesianas;
  • El procesamiento directo de variables continuas es imposible: es necesario convertirlas a una escala de intervalo para que los atributos sean discretos; sin embargo, tales transformaciones a veces pueden conducir a la pérdida de patrones significativos;
  • El resultado de la clasificación en el enfoque Naive Bayes está influenciado únicamente por los valores individuales de las variables de entrada; aquí no se tiene en cuenta la influencia combinada de pares o tripletes de valores de diferentes atributos. Esto podría mejorar la calidad del modelo de clasificación en términos de su precisión predictiva; sin embargo, aumentaría el número de opciones probadas.

La clasificación bayesiana ha encontrado una amplia aplicación en la práctica.

Filtrado de palabras bayesiano

Recientemente, se propuso la clasificación bayesiana para el filtrado de spam personal. El primer filtro fue desarrollado por Paul Graham. Para que el algoritmo funcione se deben cumplir dos requisitos.

El primer requisito es que el objeto que se clasifica tenga un número suficiente de características. Esto lo cumplen idealmente todas las palabras de las cartas de los usuarios, a excepción de las muy cortas y muy raras.

El segundo requisito es el reciclaje constante y la reposición del conjunto "spam, no spam". Estas condiciones funcionan muy bien en clientes de correo electrónico locales, ya que el flujo de "no spam" del cliente final es bastante constante y, si cambia, no lo hace rápidamente.

Sin embargo, para todos los clientes del servidor es bastante difícil determinar con precisión el flujo "no spam", ya que la misma carta que es spam para un cliente no lo es para otro. El diccionario resulta ser demasiado grande, no hay una división clara entre spam y "no spam", como resultado, la calidad de la clasificación, en este caso la solución al problema de filtrar letras, se reduce significativamente.

Nos guste o no, las estadísticas desempeñan un papel importante en el comercio. Desde noticias fundamentales llenas de números hasta informes comerciales o informes de prueba, no hay forma de escapar de los indicadores estadísticos. Al mismo tiempo, la tesis sobre la aplicabilidad de las estadísticas a la hora de tomar decisiones comerciales sigue siendo uno de los temas más controvertidos. ¿El mercado es aleatorio, las cotizaciones son estacionarias y se puede aplicar un enfoque probabilístico a su análisis? Puedes discutir sobre esto sin cesar. En Internet, e incluso en el sitio web, es fácil encontrar materiales y debates con una variedad de puntos de vista, cálculos científicos rigurosos y gráficos impresionantes. Sin embargo, los comerciantes, por regla general, están interesados ​​en el aspecto aplicado: cómo funciona todo en la práctica, en la terminal comercial. Este artículo es un intento de demostrar un enfoque pragmático de un modelo de decisión comercial probabilístico utilizando un conjunto de indicadores técnicos. Mínima teoría, máxima práctica.

La idea es evaluar el potencial de varios indicadores desde la perspectiva de la teoría de la probabilidad y probar la capacidad de un comité de indicadores para aumentar el porcentaje de ganancias de un sistema comercial.

Esto requerirá la creación de un marco para procesar señales de indicadores arbitrarios y un simple experto basado en él para realizar pruebas.

Está previsto utilizar indicadores estándar como indicadores de trabajo, pero el marco le permitirá conectar y analizar de forma independiente otros indicadores personalizados.

Pero antes de empezar a diseñar e implementar algoritmos, todavía tenemos que profundizar un poco en la teoría.

Introducción al modelo de probabilidad condicional

El título del artículo menciona el clasificador Naive Bayes. Se basa en la conocida fórmula de Bayes, que se analizará brevemente aquí, y se denomina "ingenua" debido al supuesto necesario de independencia de las variables aleatorias descritas por la fórmula. Hablaremos de la independencia de los indicadores más adelante, pero por ahora hablemos de la fórmula en sí.

donde H es una determinada hipótesis sobre el estado interno del sistema (en nuestro caso, esta es una hipótesis sobre el estado del mercado y el sistema comercial), E es un evento observado (en nuestro caso, estas son señales indicadoras), como así como las probabilidades que los describen:

  • P(H) es la probabilidad a priori del estado H, conocida a partir del historial de observaciones;
  • P(E) - la probabilidad total del evento E teniendo en cuenta todas las hipótesis existentes, de las cuales generalmente hay varias (aquí cabe señalar que las hipótesis deben ser inconsistentes, es decir, solo hay un estado del sistema en cada momento, pero para los que quieran profundizar más en la teoría, enlaces);
  • P(E|H) - probabilidad de ocurrencia del evento E si la hipótesis (estado) H es verdadera;
  • P(H|E) - probabilidad posterior de la hipótesis (estado) H al observar el evento E.

Si tomamos como ejemplo el sistema comercial más simple, los estados del mercado como el movimiento ascendente (compra), el movimiento descendente (venta) y las fluctuaciones laterales (expectativas) generalmente se consideran como hipótesis H. Las señales del indicador se utilizan como eventos E que describen el estado probable del mercado.

Para las señales de un indicador específico, es fácil calcular las probabilidades del lado derecho de la fórmula (1) en el historial disponible y luego encontrar el estado más probable del mercado P(H|E).

Sin embargo, para el cálculo es necesario definir más claramente las hipótesis y la metodología de recopilación de estadísticas a partir de las cuales se obtendrán las probabilidades.

En primer lugar, supongamos que la negociación se realiza mediante barras (no mediante ticks). El rendimiento de las operaciones se puede evaluar por el tamaño de la ganancia, el factor de ganancia u otras características, pero para simplificar la presentación, tomaremos el número de entradas ganadoras y perdedoras en el mercado. Esto vinculará directamente la evaluación del sistema con la probabilidad de operaciones exitosas (señales gastadas).

También nos limitaremos a un sistema de negociación sin niveles de toma de ganancias y stop loss, sin soporte de stop loss y sin cambiar el lote. Todos estos parámetros pueden introducirse en el modelo, pero complicarían significativamente los cálculos de probabilidad al convertirlos en distribuciones multivariadas. El único parámetro del sistema de negociación será la duración de la posición en barras. En otras palabras, después de entrar en el mercado en la dirección seleccionada mediante indicadores, la salida se realiza automáticamente después de un tiempo predeterminado. Este enfoque es bueno porque pone énfasis en la exactitud o falsedad de la hipótesis sobre el crecimiento o caída de la cotización. Por lo tanto, probaremos la hipótesis en su forma pura, sin aros salvavidas ni paja debajo.

Para completar el tema de las simplificaciones, haremos dos movimientos cardinales más.

Ya se ha dicho anteriormente que las hipótesis comerciales suelen ser "comprar", "vender" y "esperar". Al descartar la "expectativa", reduciríamos notablemente los cálculos sin pérdida de generalidad. Puede parecer que tales simplificaciones afectarán negativamente la aplicabilidad del resultado obtenido, y hasta cierto punto esto es cierto. Sin embargo, si presta atención a la cantidad de material que queda por leer incluso con tales simplificaciones, probablemente estará de acuerdo en que sería bueno obtener un modelo funcional al principio y poder agregarle detalles más adelante, gradualmente. Quienes deseen construir modelos más complejos que tengan en cuenta las densidades de probabilidad pueden encontrar trabajos relevantes en Internet, incluso en inglés, como Reasoning Methods for Merging Financial Technical Indicators, que describe un sistema híbrido probabilístico de toma de decisiones.

Finalmente, el segundo y último paso fundamental es combinar los estados de "compra" y "venta" en uno, pero con un significado universal: "entrada al mercado". Por lo general, utilizamos señales de indicadores multidireccionales de forma simétrica, de manera similar, es decir, por ejemplo, la sobrecompra según el indicador se convierte en una señal de venta y la sobreventa en una señal de compra.

En otras palabras, la hipótesis H ahora parece una entrada exitosa al mercado en cualquiera de dos direcciones (compra o venta).

En estas condiciones, el cálculo de probabilidades del lado derecho de la fórmula (1) se puede realizar en el historial de cotizaciones seleccionado de la siguiente manera.

porque en cualquier barra existe la oportunidad de ingresar con éxito al mercado: una de las direcciones será rentable (aquí descuidamos el diferencial, porque el marco de tiempo de trabajo será D1, que se analiza con más detalle a continuación).

P(E) = número de barras con señales indicadoras / número total de barras

P(E|H) = número de barras con señales de indicador que coincidieron con una dirección comercial rentable / número total de barras

Después de la simplificación, obtenemos una fórmula para calcular el historial de probabilidad de que la señal del indicador seleccionado indique las condiciones para abrir una transacción exitosa:

(2)

donde Nok es el número de señales correctas, Ntotal es el número total de señales.

Un poco más adelante implementaremos un marco que nos permitirá calcular esta probabilidad para cualquier indicador. Como veremos, esta probabilidad suele ser cercana a 0,5 y se deben realizar algunas investigaciones para encontrar condiciones en las que sea consistentemente mayor que 0,5. Sin embargo, los indicadores con un indicador grande son raros. Para los indicadores estándar, que estudiaremos primero, esta probabilidad oscila entre 0,51 y 0,55. Está claro que estos valores son demasiado pequeños y es más probable que le permitan "quedarse con lo suyo" que aumentar constantemente su depósito.

Para solucionar este problema, es necesario utilizar no un indicador, sino varios. Esta solución en sí misma no es nueva; la utilizan la mayoría de los comerciantes. Pero la teoría de la probabilidad permitirá realizar un análisis cuantitativo de la efectividad de los indicadores en varias combinaciones y evaluar el efecto potencial.

La fórmula (1) para el caso de tres indicadores (A, B, C) se verá así:

(3)

Necesitamos llevarlo a una forma conveniente para el cálculo algorítmico. Afortunadamente, la teoría bayesiana se utiliza en muchas industrias y, por lo tanto, existe una receta preparada para nuestro caso.

En particular, existe una dirección como el filtrado de spam bayesiano. No tenemos que entenderlo a fondo. Sólo los conceptos fundamentales son importantes. Un documento (por ejemplo, un mensaje de correo electrónico) se marca como spam si contiene determinadas palabras características. Se conoce la aparición general de palabras en un idioma y las probabilidades de encontrarlas en spam, del mismo modo que conocemos las probabilidades generales de las señales indicadoras y el porcentaje de sus "aciertos en la marca". En otras palabras, basta con reemplazar la hipótesis del "spam" por una "transacción exitosa" y el evento "palabra" por una "señal indicadora", para que la teoría del procesamiento de spam encaje completamente en nuestra teoría del comercio probabilístico.

Luego, la fórmula (3) se puede ampliar a través de las probabilidades de indicadores individuales de la siguiente manera (para los cálculos, consulte el enlace de arriba):

Los cálculos de P(H|A), P(H|B), P(H|C) se realizan según la fórmula (2) para cada indicador por separado.

Por supuesto, si es necesario, la fórmula (4) se puede ampliar fácilmente a cualquier número de indicadores. Para comprender aproximadamente cómo la cantidad de indicadores afecta la probabilidad de una decisión comercial correcta, supongamos que todos los indicadores tienen el mismo valor de probabilidad:

Entonces la fórmula (4) tomará la forma:

(5)

donde N es el número de indicadores.

En la Figura 1 se muestra una gráfica de esta función para varios valores de N.


Arroz. 1 Tipo de probabilidad conjunta con diferente número de variables aleatorias

Entonces, con p = 0,51 obtenemos P(3) = 0,53, lo cual no es particularmente impresionante, pero con p = 0,55 - P(3) = 0,65, y esto ya es una mejora notable.

Independencia de indicadores

Las fórmulas discutidas anteriormente se basan en el supuesto de independencia de los procesos aleatorios analizados, que en nuestro caso son señales indicadoras. ¿Pero se cumple esta condición?

Es obvio que algunos indicadores, incluidos muchos de la lista estándar, tienen mucho en común. Como ilustración visual, la Figura 2 muestra algunos de los indicadores integrados.

Arroz. 2 grupos de indicadores estándar similares

Es fácil notar que los indicadores estocástico y WPR para el mismo período, superpuestos en la última ventana, en realidad se repiten. Esto no es sorprendente ya que sus fórmulas son aritméticamente equivalentes.

Los indicadores MACD y Awesome Oscillator que se muestran justo arriba en la captura de pantalla son idénticos, ajustados al tipo de promedios móviles. Además, dado que ambos se basan en medias móviles (MA), no pueden considerarse independientes de las propias MA.

RSI, RVI, CCI también están altamente correlacionados. Cabe señalar que casi todos los osciladores estándar son similares; los coeficientes de correlación serán cercanos a 1.

También existe una notable superposición entre los indicadores de volatilidad, en particular ATR y StdDev.

Es importante tener todo esto en cuenta al crear un conjunto de indicadores para un sistema comercial, ya que el efecto real de un comité de indicadores dependientes será en la práctica mucho menor que el teórico esperado.

Por cierto, una situación similar surge cuando se entrenan redes neuronales. Con su ayuda, los traders suelen intentar procesar datos de muchos indicadores elegidos voluntariamente. Sin embargo, alimentar vectores dependientes a la entrada de las redes reduce significativamente la eficiencia del entrenamiento, ya que se desperdicia la potencia informática de la red. El volumen de datos analizados puede parecer grande, pero la información que contienen está duplicada y carece de sentido.

Un enfoque riguroso de este problema requiere calcular la correlación entre indicadores y compilar conjuntos con los valores por pares más pequeños. Esta es un gran área de investigación separada. Los interesados ​​pueden encontrar artículos sobre este tema en Internet. Aquí nos guiaremos por consideraciones generales basadas en las observaciones expuestas anteriormente. Por ejemplo, uno de los conjuntos puede verse así: Estocástico, ATR, AC (Aceleración/Desaceleración) o WPR, Bandas de Bollinger, Momentum.

Cabe aclarar aquí que el indicador de aceleración/desaceleración (AC) es esencialmente un derivado del oscilador. ¿Por qué es apto para ser incluido en el grupo?

Imaginemos una serie de cotizaciones (o un oscilador derivado de ellas) en forma simplificada como fluctuaciones periódicas, por ejemplo, coseno o seno. Recuerde que las derivadas de estas funciones son iguales, respectivamente:

(6)

Las correlaciones entre estas funciones y sus derivadas son cero.

Por lo tanto, utilizar la primera derivada de un indicador es generalmente un buen candidato para ser considerado como indicador independiente adicional.

La segunda derivada es un candidato dudoso en tales procesos oscilatorios, porque las posibilidades de obtener una réplica de la señal original son altas.

Concluyendo la conversación sobre la independencia de los indicadores, tiene sentido detenerse en la cuestión de si las copias de un indicador calculado con diferentes períodos pueden considerarse independientes.

Se puede suponer que la respuesta depende de la proporción de períodos. Obviamente, una ligera diferencia preserva la dependencia de los indicadores y, por lo tanto, se requiere una diferencia notable. Esto concuerda en parte con los métodos clásicos, como el método de las tres pantallas de Elder, donde los períodos de tiempo que difieren, por regla general, al menos 5 veces, equivalen a analizar indicadores con diferentes períodos de tiempo.

Cabe señalar que en el sistema considerado las cantidades independientes no deberían ser en realidad las lecturas de los indicadores, sino las señales comerciales generadas por ellos. Sin embargo, para la mayoría de los indicadores del mismo tipo, por ejemplo, los osciladores, los principios de generación de señales comerciales son similares y, por lo tanto, una dependencia fuerte o débil de las series temporales equivale a una dependencia fuerte o débil de las señales.

Diseño

Entonces, hemos entendido la teoría y estamos listos para abordar la cuestión de qué y cómo codificar.

Recopilaremos estadísticas de señales comerciales de indicadores con un experto especial. Para que un experto pueda operar basándose en lecturas de indicadores arbitrarios, será necesario desarrollar un marco (de hecho, un archivo de encabezado mqh) que recibirá una descripción de los indicadores utilizados y cómo generar señales basadas sobre ellos a través de parámetros de entrada. Por ejemplo, deberíamos poder establecer dos medias móviles de diferentes períodos en los parámetros y generar señales de compra y venta. cuando el MA rápido cruza al más lento hacia arriba y hacia abajo, respectivamente.

El Asesor Experto tendrá control explícito sobre la apertura de barras y negociará únicamente a precios de apertura. Este no es un verdadero experto, sino una herramienta para calcular probabilidades y probar hipótesis. Para nosotros es importante que la verificación se realice rápidamente, porque hay un número ilimitado de opciones para conjuntos de indicadores.

D1 se utilizará como plazo de trabajo predeterminado. Por supuesto, nadie prohibirá análisis adicionales en ningún otro período de tiempo, pero D1 es el menos susceptible al ruido aleatorio, y el análisis de patrones que han existido durante varios años cumple más plenamente con los detalles del enfoque probabilístico. Además, para las estrategias comerciales en D1, generalmente se puede ignorar el diferencial, lo que neutraliza nuestra negativa a respaldar el estado intermedio del sistema de "espera". Por supuesto, para el comercio intradiario no se podría hacer tal suposición y sería necesario calcular la probabilidad de un mayor número de hipótesis.

Como se mencionó anteriormente, el experto abrirá posiciones basándose en las señales del indicador y las cerrará después de un período de tiempo predeterminado. Para ello introducimos el parámetro de entrada correspondiente. Su valor predeterminado será de 5 días. Este es el período característico del período D1 y se utiliza en muchos artículos de investigación comercial que también utilizan D1.

El EA y el marco serán multiplataforma, es decir, se compilarán y ejecutarán tanto en MetaTrader 4 como en MetaTrader 5. Esta característica se proporcionará a través de archivos contenedores de encabezado existentes y disponibles públicamente que permiten el uso de MetaTrader 4 MQL. Sintaxis API en el entorno MetaTrader 5 y, además, en algunos casos usaremos compilación condicional: partes específicas del código se incluirán en directivas de preprocesador #ifdef __MQL4__ y #ifdef __MQL5__.

Implementación en MQL

Marco para indicadores

Comenzaremos nuestra revisión del marco para procesar señales de indicadores discutiendo qué tipos de indicadores necesitaremos. La lista más obvia incluye todos los indicadores integrados, así como un elemento para indicadores personalizados. iPersonalizado. Será necesaria una enumeración para seleccionar indicadores utilizando los parámetros de entrada del marco.

enum IndicatorType (iCustom, iAC, iAD, tADX_period_price, tAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price, iAO, iATR_period, tBands_period_deviation_shift_price, iBearsPower_period_price, iBullsPower_period_price, iBWMFI, iCCI_period_price, iDeMar ker_period, tEnvelopes_period_method_shift_price_deviation, iForce_period_method_price, dFractals, dGator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price, fIchimoku_tenkan_kijun_senkou, iMoment um_period_price, iMFI_period, iMA_period_shift_method_price, dMACD_ precio_señal_lenta_rápida, precio_iOBV, iOsMA_fast_slow_signal_price, iRSI_period_price, dRVI_period, iSAR_step_maximum, iStdDev_period_shift_method_price, dStochastic_K_D_slowing_method_price, iWPR_period);

El nombre de cada indicador integrado contiene un sufijo con información sobre los parámetros del propio indicador. El primer carácter del elemento indica el número de buffers disponibles, por ejemplo, i - un buffer, d - dos, t - tres. Todos estos son sólo consejos para el usuario. Si especifica una cantidad incorrecta de parámetros o el índice de un búfer inexistente, el marco mostrará un error en el registro.

Por supuesto, en los parámetros de entrada deberá especificar para cada indicador no sólo su tipo, sino también los parámetros reales en forma de cadena, el número del búfer y el número de la barra desde la que se leerán los datos.

Según las lecturas del indicador, es necesario generar señales. En principio pueden haber muchas diferentes, pero reuniremos las principales opciones en otro listado.

enum SignalCondition (Disabled, NotEmptyIndicatorX, SignOfValueIndicatorX, IndicatorXcrossesIndicatorY, IndicatorXcrossesLevelX, IndicatorXrelatesToIndicatorY, IndicatorXrelatesToLevelX);

Así, se pueden generar señales:

  • si el valor del indicador no está vacío;
  • el valor del indicador tiene el signo requerido (positivo o negativo);
  • el indicador cruza otro indicador, y aquí cabe señalar que al describir la señal, debemos brindar la oportunidad de especificar 2 indicadores;
  • el indicador cruza un cierto nivel, y aquí queda claro que debería haber un campo para ingresar el nivel;
  • el indicador está posicionado según sea necesario en relación con otro indicador (por ejemplo, arriba o abajo);
  • el indicador está colocado de la manera requerida en relación con el nivel especificado;

El primer elemento, Desactivado, le permite desactivar cualquier condición de generación de señal. Proporcionaremos varios grupos idénticos de parámetros de entrada para describir las señales y cada señal estará desactivada de forma predeterminada.

A partir de los nombres de los elementos del listado anterior, se puede suponer que de alguna manera es necesario establecer el signo requerido de los valores y la posición de las líneas entre sí. Para ello, agreguemos una enumeración más.

enumeración ArribaCeroAbajo (EqualOrNone, UpSideOrAboveOrPositve, DownSideOrBelowOrNegative, NotEqual);

EqualOrNone le permite comprobar:

  • valor vacío en combinación con SignOfValueIndicatorX
  • igualdad de niveles en combinación con IndicatorXrelatesToLevelX

UpSideOrAboveOrPositve le permite verificar:

  • cruce de abajo hacia arriba usando IndicatorXcrossesIndicatorY
  • valor positivo usando SignOfValueIndicatorX
  • cruzar un nivel de abajo hacia arriba usando IndicatorXcrossesLevelX
  • crecimiento de los valores del indicador en barras sucesivas usando IndicatorXrelatesToIndicatorY, si X e Y son el mismo indicador
  • colocando X sobre Y usando IndicatorXrelatesToIndicatorY si X e Y son indicadores diferentes
  • posicionar el indicador por encima del nivel usando IndicatorXrelatesToLevelX

DownSideOrBelowOrNegative le permite verificar:

  • cruce de arriba hacia abajo usando IndicatorXcrossesIndicatorY
  • a un valor negativo usando SignOfValueIndicatorX
  • cruzar un nivel de arriba a abajo usando IndicatorXcrossesLevelX
  • soltar los valores del indicador en barras consecutivas usando IndicatorXrelatesToIndicatorY si X e Y son el mismo indicador
  • colocando X debajo de Y usando IndicatorXrelatesToIndicatorY si X e Y son indicadores diferentes
  • posicionar el indicador por debajo del nivel usando IndicatorXrelatesToLevelX

NotEqual le permite comprobar:

  • desigualdad al nivel (valor) usando IndicatorXrelatesToLevelX

Cuando se activa la señal, es necesario procesarla. Para ello, definiremos una enumeración especial.

enum SignalType (Alerta, Compra, Vender, CerrarCompra, CerrarVenta, CerrarTodo, ComprarAndCloseSell, SellAndCloseBuy, ModifyStopLoss, ModifyTakeProfit, ProceedToNextCondition);

Aquí se muestran las principales acciones para procesar señales: mostrar un mensaje, comprar, vender, cerrar todas las órdenes abiertas (compra, venta o ambas), invertir de venta a compra, invertir de compra a venta, modificar niveles de stop loss o take. beneficio, así como la transición a la verificación de la siguiente condición (señal). El último punto le permite construir una verificación de señal en una cadena (por ejemplo, verificar si el búfer principal ha cruzado la línea de señal y, de ser así, verificar más a fondo si esto sucedió por encima o por debajo de un cierto nivel).

Puede notar que no hay ninguna configuración de órdenes pendientes en la lista de acciones. Esto queda fuera del alcance de este trabajo. Los interesados ​​pueden ampliar el marco.

Teniendo todas estas enumeraciones, es posible describir varios grupos de atributos con ayuda de los cuales se establecen los indicadores operativos. Un grupo se parece a:

entrada Tipo de indicador Indicador1Selector = iPersonalizado; // · Cadena de entrada del selector Indicator1Name = ""; // · Cadena de entrada de nombre Parameter1List = "" /*1.0,value:t,value:t*/ ; // · Cadena de entrada de parámetros Indicator1Buffer = ""; // · Entrada del búfer int Indicator1Bar = 1; // · Bar

El parámetro Indicator1Name está destinado a especificar el nombre de un indicador personalizado cuando iCustom está configurado en Indicator1Selector.

El parámetro Parameter1List le permite especificar los parámetros del indicador como una cadena, separados por comas. El tipo de cada parámetro de entrada se reconocerá automáticamente, por ejemplo, 11.0 - doble, 11 - int, 2015.01.01 20:00 - fecha/hora, verdadero/falso - bool, "texto" - cadena. Algunos parámetros (por ejemplo, tipos de media móvil o tipos de precios) se pueden especificar no como un número, sino como una cadena sin comillas (sma, ema, smma, lwma, cierre, apertura, máximo, mínimo, mediana, típico, ponderado, bajoalto, cercacerrado).

Indicator1Buffer: número o nombre del búfer sin comillas. Los nombres de búfer admitidos son principal, señal, superior, inferior, mandíbula, dientes, labios, tenkan, kijun, senkouA, senkouB, chikou, +di, -di.

Indicator1Bar: número de barra, el valor predeterminado es 1.

Una vez determinados los indicadores, se pueden generar señales en base a ellos, es decir, condiciones para desencadenar eventos. Cada señal está especificada por un grupo de parámetros de entrada.

cadena de entrada __SIGNAL_A = ""; entrada SignalCondition CondiciónA = Desactivado; // · Condición A cadena de entrada IndicatorA1 = ""; // · Indicador X para la señal A cadena de entrada IndicatorA2 = ""; // · Indicador Y para la señal A entrada doble NivelA1 = 0; // · Nivel X para entrada de señal A double NivelA2 = 0 ; // · Nivel Y para entrada de señal A UpZeroDown DirectionA = EqualOrNone; // · Dirección o señal A entrada SignalType ExecutionA = Alerta ; // Acción A

Para cada señal, puede especificar un identificador en el parámetro __SIGNAL_.

Usando Condición, selecciona la condición para verificar la señal. A continuación, se establecen uno o dos indicadores y uno o dos valores de nivel (el segundo nivel está reservado para el futuro y no se utilizará en este experimento). Los indicadores en los parámetros del indicador son el número de indicador del grupo de atributos correspondiente o el prototipo del indicador en la forma:

nombredelindicador@búfer(param1,param2,...)

Esta forma de registro le permite determinar rápidamente el indicador utilizado sin describirlo en detalle utilizando un grupo de atributos. Por ejemplo,

iMA@0(1,0,pequeña,alta)

da valores de precios altos, y en cada barra actual de un experto en trabajo, se toma la barra número 1 (la completada más recientemente, para la cual finalmente se conoce el precio alto).

Por lo tanto, los indicadores se pueden especificar tanto en grupos de atributos seleccionados (para su posterior referencia desde señales por número) como directamente en señales en el parámetro Indicador (X o Y). El primer método es conveniente si es necesario utilizar el mismo indicador en diferentes señales o como X e Y dentro de una señal.

El parámetro Dirección especifica la dirección o el signo del valor para que se active la condición. De acuerdo con Ejecución, se realiza una u otra acción cuando se activa la señal.

Dentro del marco, ahora se determina que un indicador no puede tener más de 20 parámetros, el número máximo de grupos seleccionados con atributos de indicador es 6 (pero, como recordamos, los indicadores también se pueden configurar directamente en la señal), y las señales - 8. Todo esto se puede cambiar en el código fuente. El archivo IndicatN.mqh se adjunta al final del artículo.

También en este archivo, en forma de varias clases, se implementa toda la lógica para analizar los parámetros del indicador, llamarlos, verificar las condiciones y devolver los resultados de la verificación al código de llamada (que será nuestro experto).

En particular, para transmitir instrucciones sobre la necesidad de realizar cualquier acción de la enumeración SignalType analizada anteriormente, se utiliza una clase pública simple TradeSignals con campos lógicos correspondientes a los elementos de la enumeración:

clase TradeSignals (público: bool alerta; bool comprar; bool vender; bool comprarSalir; bool venderSalir; bool ModifySL; bool ModifyTP; índice int; valor doble; mensaje de cadena; TradeSignals(): alerta(falso), comprar(falso), vender (falso), comprarSalir(falso), venderSalir(falso), ModificarSL(falso), ModificarTP(falso), valor (EMPTY_VALUE), mensaje("" )());

Cuando se cumplen las condiciones necesarias, los campos se establecen en verdadero. Por ejemplo, si se selecciona la acción Cerrar todo, los indicadores buyExit y sellExit se configuran en el objeto TradeSignals.

El campo de índice contiene el número de serie de la condición desencadenada.

Usando el campo de valor, puede pasar un valor arbitrario, por ejemplo, un nuevo nivel de stop loss obtenido a partir de los valores del indicador.

Finalmente, el campo de mensaje contiene un mensaje para el usuario que describe la situación.

Los detalles de la implementación de todas las clases se pueden encontrar en el código fuente. Utiliza los archivos de encabezado auxiliares fmtprnt2.mqh (salida de registro formateada) y RubbArray.mqh (matriz de goma), que también se incluyen.

El archivo de encabezado del marco IndicatN.mqh debe incluirse en el código experto utilizando la directiva #include. Como resultado, después de la compilación en el cuadro de diálogo de configuración experta, obtendremos grupos de parámetros de entrada con atributos de indicador:

Fig.3 Configuración de indicadores

y con definiciones de señal:

Fig.4 Configuración de señales comerciales

Las capturas de pantalla muestran propiedades ya completadas. Los veremos en detalle cuando pasemos al concepto de Asesor Experto y comencemos a configurar estrategias comerciales específicas. Vale la pena señalar aquí que al configurar los atributos del indicador, puede reemplazar cualquier parámetro numérico con una expresión como =var1, =var2, etc. a 9. Se refieren a parámetros de entrada de marco especiales del mismo nombre var1, var2, etc., destinados a la optimización. Por ejemplo, la entrada:

iMACD@principal(=var4,=var5,=var6,abierto)

significa que los parámetros de los períodos de media móvil de señal MACD rápido, lento y se pueden optimizar a través de los parámetros de entrada var4, var5 y var6 respectivamente. E incluso con la optimización desactivada, durante las pruebas individuales, los valores de los atributos del indicador correspondiente se leerán de los parámetros de entrada especificados del marco.

Experto en pruebas

Para facilitar la codificación, trasladaremos todas las funciones comerciales a una clase especial y la diseñaremos como un archivo de encabezado independiente Expert0.mqh. Dado que vamos a probar sistemas comerciales bastante simples, la clase solo permitirá abrir y cerrar posiciones.

Por lo tanto, todas las operaciones rutinarias con indicadores y relacionadas con el comercio se colocan en archivos de encabezado.

#incluir<IndicatN.mqh >#incluir<Experto0.mqh >

Directamente en el archivo experto indstats.mq4 habrá muy pocas líneas de código y una lógica simple.

Dado que el Asesor Experto debe compilarse y funcionar en MetaTrader 5 después de cambiar la extensión a mq5, agregaremos archivos de encabezado que garanticen la transferencia de códigos al nuevo entorno.

#ifdef __MQL5__ #incluir #incluir #incluir #terminara si

Ahora pasemos a los parámetros de entrada del Asesor Experto.

entrada int Número de señal consistente = 1; entrada int Magia = 0; flotador de entrada Lote = 0,01 f; entrada int TradeDuration = 1;

Se requieren Magic y Lot para crear un objeto Expert a partir del archivo Expert0.mqh.

Experto e(Magia, Lote);

El parámetro ConsistentSignalNumber contendrá la cantidad de señales comerciales que intentamos combinar para mejorar la confiabilidad.

El parámetro TradeDuration especifica el número de barras durante las cuales se mantendrá la posición abierta. Como se mencionó anteriormente, abriremos operaciones basadas en señales y las cerraremos después de 5 barras, es decir. días, ya que se utiliza el plazo D1.

En el controlador de eventos OnInit, inicializaremos el marco del indicador.

int OnInit () ( return IndicatN::handleInit(); )

En el controlador OnTick proporcionaremos control sobre la apertura de la barra.

void OnTick () ( fecha y hora estática lastBar; if (lastBar != Time) ( const RubbArray *ts = IndicatN::handleStart(); ... última barra = Hora; ) )

Al formar una nueva barra, comprobaremos todos los indicadores y las condiciones asociadas a ellos llamando nuevamente al marco de indicadores. Como resultado, obtenemos una serie de señales activadas: objetos TradeSignals.

Ahora toca hablar de la acumulación de estadísticas.

Cada condición (evento) del marco, si ocurre, genera una señal con el indicador de alerta de forma predeterminada. Usaremos esto para contar la cantidad de señales de los indicadores, así como la cantidad de estados realizados del sistema, es decir. casos (barras) en los que comprar o vender sería exitoso.

Para calcular estadísticas, describiremos matrices.

barras enteras = 0; // recuento total de barras/muestras int toro = 0, oso = 0; // número de barras/muestras por tipo de operación int comprar = (0), vender = (0); // matrices de señales incondicionales int comprarOnBull = (0), venderOnBear = (0); // matrices de señales condicionales (exitosas)

En nuestro caso de negociación de barras, cada barra es una nueva entrada potencial en una operación que dura 5 barras. Cada uno de estos segmentos se caracteriza por un aumento o caída de las cotizaciones y se marca como alcista o bajista, respectivamente.

Todas las señales de compra y venta se resumirán en los arrays de compra y venta, y si la señal correspondiente coincide con el “bullness” o “bajista” del segmento, es decir, tiene éxito, también se acumula en el buyOnBull o matriz sellOnBear, según el tipo.

Para llenar las matrices, escribamos el siguiente código dentro de OnTick.

const RubbArray *ts = IndicatN::handleStart(); bool arriba = falso, abajo = falso; int comprarSignalCount = 0, venderSignalCount = 0; para (int i = 0 ; i< ts.size(); i++) { // las alertas se utilizan para recopilar estadísticas si (ts[i].alerta) ( // mientras configuramos eventos, enumerados por i, // la hipótesis H_xxx debería venir primero, antes de las señales S_xxx, // porque aquí asignamos marcas arriba o abajo if (IndicatN::GetSignal(ts[i].index) == "H_BULL" ) ( bull++; buy.index]++; up = true ; ) else if (IndicatN::GetSignal(ts[i].index) == "H_BEAR" ) ( oso++; sell.index]++; abajo = verdadero ; ) else if (StringFind (IndicatN::GetSignal(ts[i].index), "S_BUY" ) == 0 ) ( comprar. index]++; if (arriba) ( if (PrintDetails) Print ("buyOk " , IndicatN::GetSignal(ts[i].index)); buyOnBull.index]++; ) ) else if (StringFind (IndicatN: :GetSignal(ts[i].index), "S_SELL" ) == 0 ) ( sell.index]++; if (abajo) ( if (PrintDetails) Print ("sellOk " , IndicatN::GetSignal(ts[i] ].index)); sellOnBear.index]++; ) ) if (PrintDetails) Print (ts[i].message); ) )

Habiendo recibido una serie de señales activadas, repasamos sus elementos en un bucle. Si se establece el indicador de alerta, se trata de una recopilación de estadísticas.

Antes de analizar el código más profundamente, introduzcamos una convención especial para nombrar señales (eventos). Las hipótesis sobre condiciones de mercado alcistas o bajistas se marcarán con los identificadores H_BULL y H_BEAR. Estos eventos deben determinarse primero utilizando los parámetros de entrada del marco, antes que otros eventos (señales indicadoras). Esto es necesario para establecer los signos correspondientes (variables lógicas hacia arriba y hacia abajo) en base a hipótesis confirmadas.

Las señales del indicador deben tener identificadores que comiencen con S_BUY o S_SELL.

Como puedes ver, usando una referencia al número del evento activado ts[i].index, obtenemos su identificador mediante una llamada a la función GetSignal. Si las hipótesis se cumplen, actualizamos los contadores generales de tramos alcistas o bajistas. En el caso de generar señales, mantenemos su conteo total para cada tipo de señal, así como su índice de éxito, es decir, el número de coincidencias con las hipótesis actuales.

Recuerde que la hipótesis H_BULL o la hipótesis H_BEAR son verdaderas en cada barra.

Además de recopilar estadísticas, el experto debe apoyar el comercio basado en señales. Para ello, complementaremos el cuerpo del bucle con un cheque para las banderas de compra y venta.

if (ts[i].buy) ( buySignalCount++; ) else if (ts[i].sell) ( sellSignalCount++; )

Después del ciclo, implementamos la funcionalidad comercial. En primer lugar, cerraremos las posiciones abiertas (si las hay) después del período especificado.

if (e.getLastOrderBar() >= TradeDuration) ( e.closeMarketOrders(); ) if (buySignalCount >= ConsistentSignalNumber && sellSignalCount >= ConsistentSignalNumber) ( Print ("Colisión de señales" ); ) else if (buySignalCount >= ConsistentSignalNumber) ( e.closeMarketOrders(e.mask(OP_SELL)); if (e.getOrderCount(e.mask(OP_BUY)) == 0) ( e.placeMarketOrder(OP_BUY); ) ) else if (sellSignalCount >= ConsistentSignalNumber) ( e. closeMarketOrders(e.mask(OP_BUY)); if (e.getOrderCount(e.mask(OP_SELL)) == 0) ( e.placeMarketOrder(OP_SELL); ) )

Si las señales de compra y venta se contradicen, nos saltamos esta condición. Si el número de señales de compra o venta es igual o mayor que el ConsistentSignalNumber predefinido, abra la orden correspondiente.

Cabe señalar que al establecer ConsistentSignalNumber en un valor inferior al número de señales configuradas, será posible probar el sistema en el modo de combinación de todas o la mayoría de las estrategias. En funcionamiento normal, el experto utilizará intersección en lugar de unión, ya que para encontrar eventos conjuntos, ConsistentSignalNumber debe ser exactamente igual al número de señales. Por ejemplo, con 3 señales configuradas y ConsistentSignalNumber igual a 3, la negociación se realizará solo cuando los tres eventos ocurran simultáneamente. Si ConsistentSignalNumber se establece en 1, las operaciones se abrirán al recibir cualquiera (al menos una) de las 3 señales.

En el controlador de OnDeinit, mostraremos las estadísticas recopiladas sobre alertas o el historial de pedidos en el registro.

El código fuente completo del Asesor Experto se puede ver en el archivo indstats.mq4.

Todas las señales deben compararse con dos hipótesis de compra o venta. Para ello configuraremos las señales H_BULL y H_BEAR, así como sus indicadores.

Para obtener precios de barras, utilice el indicador iMA con un período de 1. En el grupo __INDICATOR_1, establezca:

Selector = iMA_period_shift_method_price

Parámetros = 1,0,sma,abierto

En el grupo __INDICATOR_2 haremos configuraciones similares excepto por el número de barra; allí debe ingresar 5, la cantidad de barras que usaremos en el parámetro TradeDuration.

En otras palabras, en el modo de recopilación de estadísticas, el experto no opera, sino que analiza el cambio en las cotizaciones entre la barra 5 y 0, así como las señales del indicador en la barra 5 o 6, dependiendo del tipo de precio utilizado: por indicadores que funcionan a precios de apertura, puede tomar valores de la barra 5 y para todos los demás, de la 6. En el modo de recopilación de estadísticas, la barra número 5 es una barra virtual actual, y todas las siguientes proporcionan información sobre el "futuro" implementación de hipótesis de mercado alcistas o bajistas.

Inmediatamente hagamos una reserva de que en el modo de negociación tomaremos señales de la barra 0 (si el indicador se construye al precio de apertura) o de la barra 1 (en otros casos). Si el experto no trabajó basándose en los precios de apertura y analizó los ticks, sería necesario observar los valores del indicador en la barra 0 en este modo.

La presencia de estos dos modos (recopilación de estadísticas y comercio) implica la necesidad de crear diferentes conjuntos de parámetros que difieren en el número de barras de trabajo. Comenzaremos con un conjunto para recopilar estadísticas y luego lo convertiremos fácilmente en uno comercial real.

Utilizando estas dos copias del indicador MA, estableceremos hipótesis. En el grupo __SIGNAL_A ingresamos:

SEÑAL_A = H_BULL

Condición = IndicatorXrelatesToIndicatorY Indicador X = 1 Indicador Y = 2 Dirección o señal = UpSideOrAboveOrPositve Acción = Alerta

Configuremos el grupo __SIGNAL_B de la misma manera, excepto por la dirección:

SEÑAL_B = H_OSO
Dirección o signo = DownSideOrBelowOrNegative

Para probar el modelo de comercio probabilístico, utilizaremos 3 estrategias estándar basadas en indicadores:

  • estocástico
  • Bandas de Bollinger

Tengamos en cuenta de antemano que se han optimizado los parámetros de todos los indicadores, algunos de los cuales se dejaron específicamente en forma de enlaces a las variables de entrada var1, var2, etc. para demostrar esta capacidad del marco. Para replicar resultados positivos con los datos de su proveedor, es probable que sea necesario volver a optimizar cada estrategia.

Estrategia estocástica Consiste en comprar cuando el indicador cruza el nivel 20 de abajo hacia arriba y vender cuando cruza el nivel 80 de arriba hacia abajo. Para ello definimos el grupo __INDICATOR_3:

Selector = dStochastic_K_D_slowing_method_price

Parámetros = 14,3,3,sma,lowhigh Buffer = barra principal = 6

Dado que el indicador utiliza precios altos y bajos, es necesario tomar la barra número 6, la última completamente formada antes de la barra 5, donde comienza el comercio virtual si se activa la señal.

Basándonos en el indicador estocástico, configuraremos señales de compra y venta. Grupo para compra:

SIGNAL_C = S_BUY estocástico

Condición = IndicatorXcrossesLevelX Nivel X = 20 Dirección o signo = UpSideOrAboveOrPositve

Grupo en venta:

SIGNAL_D = S_SELL estocástico

Condición = IndicatorXcrossesLevelX Nivel X = 80 Dirección o signo = DownSideOrBelowOrNegative

estrategia MACD Consiste en comprar cuando la línea principal cruza la línea de señal hacia arriba y vender cuando cruza hacia abajo.

Configuremos el grupo de indicadores __INDICATOR_4:

Selector = dMACD_fast_slow_signal_price

Parámetros = =var4,=var5,=var6,abrir Búfer = señal Barra = 5

Leeremos los períodos de señal rápida, lenta de los parámetros var4, var5, var6, disponibles para optimización. Ahora hay 6, 21, 6 respectivamente. Usamos el compás 5 porque... Construimos el indicador en función del precio de apertura.

Dado que el número de grupos para configurar indicadores es limitado, describiremos el búfer principal directamente en las señales. Grupo para compra:

SEÑAL_E = S_COMPRAR macd

Condición = IndicatorXcrossesIndicatorY Indicador X = iMACD@main(=var4,=var5,=var6,open) Indicador Y = 4 Dirección o signo = UpSideOrAboveOrPositve

Grupo en venta:

SEÑAL_F = S_VENDER macd

Condición = IndicatorXcrossesIndicatorY Indicador X = iMACD@main(=var4,=var5,=var6,open) Indicador Y = 4 Dirección o signo = DownSideOrBelowOrNegative

Estrategia basada en BollingerBands Consiste en comprar cuando el máximo de la barra anterior rompe la línea superior del indicador desplazada 2 barras hacia la derecha, y vender cuando el mínimo de la barra anterior rompe la línea inferior del indicador desplazada 2 barras hacia la derecha. A continuación se muestran las configuraciones de las dos líneas indicadoras.

Parámetros = =var1,=var2,2,típico

Buffer = barra superior = 5

Selector = tBands_period_deviation_shift_price

Parámetros = =var1,=var2,2,búfer típico = barra inferior = 5

El período y la desviación se especifican en var1 y var2 como 7 y 1 respectivamente. En ambos casos se puede utilizar la barra 5, a pesar del tipo de precio típico, porque las líneas del indicador están desplazadas 2 barras hacia la derecha, es decir en realidad se calculan a partir de datos pasados.

Finalmente, los grupos de configuración de señal se ven así.

SIGNAL_G = S_BUY bandas

Condición = IndicatorXcrossesIndicatorY Indicador X = iMA@0(1,0,sma,high) Indicador Y = 5 Dirección o signo = UpSideOrAboveOrPositve

SIGNAL_H = S_SELL bandas

Condición = IndicatorXcrossesIndicatorY Indicador X = iMA@0(1,0,sma,low) Indicador Y = 6 Dirección o signo = DownSideOrBelowOrNegative

Todas las configuraciones en forma de archivos configurados se adjuntan al final del artículo.

resultados

Estadísticas sobre indicadores

Para calcular las probabilidades, utilizamos estadísticas para el período 2014.01.01-2017.01.01 para el par EURUSD D1. La configuración experta para el modo de recopilación de estadísticas está contenida en el archivo indstats-stats-all.set.

Los datos recopilados se muestran en el registro. A continuación se muestra un ejemplo:

: barras=778 : alcista=328 bajista=449 : comprar: 328 0 30 0 50 0 58 0 : comprarOk: 0 0 18 0 29 0 30 0 : vender: 0 449 0 22 0 49 0 67 : venderOk: 0 0 0 14 0 28 0 41 : totales: 0,00 0,00 0,60 0,64 0,58 0,57 0,52 0,61 : Estadísticas por nombre: : macd=0,576 : bandas=0,568 : estocástico=0,615

El número total de barras es 778, de las cuales 328 eran adecuadas para una operación de compra exitosa de 5 días y 449 eran adecuadas para una operación de venta exitosa de 5 días. Las primeras 2 columnas contienen contadores de hipótesis: los mismos 2 números, y los siguientes pares de columnas se refieren a las estrategias comerciales correspondientes, cada una de las cuales está representada por una columna de compra y una columna de venta. Por ejemplo, la estrategia estocástica generó 30 señales de compra, 18 de las cuales fueron rentables, y 22 señales de venta, 14 de las cuales fueron rentables. Si sumamos el número total de señales de éxito de cada estrategia y lo dividimos por el número de señales generadas, obtenemos la efectividad (probabilidad de éxito basada en datos históricos) de cada una de ellas:

  • Estocástico - 0.615
  • MACD-0,576
  • Bandas - 0,568
Comercio de prueba

Para asegurarse de que las estadísticas se calculen correctamente, debe ejecutar el Asesor Experto en modo comercial. Para hacer esto, necesita editar los números de barra en la configuración, reemplazando 5 con 0, 6 con 1. Además, debe habilitar secuencialmente las estrategias comerciales una tras otra configurando los parámetros de Acción en Comprar y Vender en lugar de Alerta. Por ejemplo, para probar el comercio estocástico, en el grupo __SIGNAL_C (S_BUY estocástico), reemplace el valor de Alerta en el parámetro Acción con el valor de Compra, y en el grupo __SIGNAL_D (S_SELL estocástico), reemplace el valor de Alerta con Vender.

Las configuraciones correspondientes para las 3 estrategias se encuentran, respectivamente, en los archivos indstats-trade-stoch.set, indstats-trade-macd.set, indstats-trade-bands.set.

Al ejecutar el experto 3 veces con estos conjuntos de parámetros, obtendremos 3 registros con breves informes comerciales. Las estadísticas están al final. Por ejemplo, para estocástico obtenemos la línea:

: Compra: 18/29 0,62 Vende: 14/22 0,64 Total: 0,63

Estas son las cifras sobre transacciones reales: 18 compras de 29 son rentables, 14 ventas de 22 son rentables y la eficiencia general de la señal es de 0,63.

Los resultados de las estrategias MACD y BollingerBands se muestran a continuación.

: Compra: 29/49 0,59 Vende: 28/49 0,57 Total: 0,58

: Compra: 29/51 0,57 Vende: 34/59 0,58 Totales: 0,57

Resumamos los indicadores de todas las estrategias en una lista.

  • Estocástico - 0,63
  • MACD-0,58
  • Bandas - 0,57

Aquí vemos un acuerdo casi completo con la teoría de la subsección anterior. Parte de la diferencia se debe al hecho de que las señales comerciales pueden superponerse entre sí si están dentro de 5 barras y luego no se abre una operación repetida.

Por supuesto, podemos analizar los informes comerciales de cada estrategia.


Fig.5 Informe de estrategia basado en el indicador estocástico


Fig.6 Informe de estrategia basado en el indicador MACD


Fig.7 Informe de estrategia basado en el indicador BollingerBands

Usando la fórmula (4), calculamos la probabilidad teórica de que la transacción tenga éxito al ingresar en función de las señales sincrónicas de los tres indicadores.

P(H|ABC) = 0,63 * 0,58 * 0,57 / (0,63 * 0,58 * 0,57 + 0,37 * 0,42 * 0,43) = 0,208278 / (0,208278 + 0,066822) = 0,208278 / 0,2751 = 0,757

Para probar esta situación, debemos habilitar las tres señales y también cambiar el valor del parámetro ConsistentSignalNumber de 1 a 3. Las configuraciones correspondientes se encuentran en el archivo indstats-trade-all.set.

Según la prueba comercial realizada en el probador, la eficiencia final de dicho sistema en la práctica es 0,75:

: Compra: 4/7 0,57 Vende: 5/5 1,00 Total: 0,75

Aquí está el informe de la prueba:


Fig.8 Informe sobre una combinación de estrategias basada en 3 indicadores

A continuación se muestra una tabla de indicadores comerciales para cada uno de los indicadores por separado y para su superposición.


Ganancia, $ FP norte dd$
estocástico 204 2.36 51 41
MACD 159 1.39 98 76
Bandas 132 1.29 110 64
Total 68 3.18 12 30

Como podemos ver, el aumento en la probabilidad de ganar se logra gracias a entradas más raras, pero más precisas: el número de transacciones y la ganancia total han disminuido, pero el factor de ganancia y la reducción máxima han mejorado en al menos un 35%, y en algunos casos, más de 2 veces.

Conclusión

El artículo analiza la opción más sencilla para implementar un enfoque probabilístico para tomar decisiones comerciales basadas en señales de indicadores. Con la ayuda de un experto especial, se demostró que los cálculos teóricos para aumentar la probabilidad de transacciones exitosas utilizando la fórmula de Bayes corresponden a los resultados obtenidos en la práctica.

Dado que la generación de señales es discreta, las señales de diferentes indicadores pueden no coincidir y es potencialmente posible una situación en la que la superposición de indicadores no da señales comunes confirmadas por todos los indicadores. Una posible solución a este problema es introducir una tolerancia temporal entre señales.

En un caso más general, es posible calcular la densidad de probabilidad de la implementación de hipótesis comerciales dependiendo del estado (y no de las señales) de los indicadores. Por ejemplo, el valor de sobrecompra o sobreventa determinado por un valor de oscilador específico proporciona el porcentaje (probabilidad) de entradas exitosas. Además, la probabilidad de una transacción exitosa depende obviamente de los parámetros seleccionados de stop loss y takeprofit, de los métodos de gestión de lotes y de muchos otros parámetros del sistema. Todo esto puede analizarse desde el punto de vista de la teoría de la probabilidad y utilizarse para realizar cálculos más precisos, pero también más complejos, de las decisiones comerciales.

Los archivos se adjuntan a continuación:

  • indstats.mq4 (también conocido como indstats.mq5) - experto;
  • common-includes.zip: archivo con archivos de encabezado mqh comunes utilizados;
  • adicional-mt5-includes.zip: archivo con archivos de encabezado adicionales para MT5;
  • instats-tester-sets.zip: archivo con archivos de configuración establecidos;

Aplicación más común Bayes ingenuo- clasificación de documentos. ¿Este correo electrónico es spam o es una buena noticia? ¿Esta publicación de Twitter es benigna o enojada? ¿Debería entregarse esta llamada de teléfono celular interceptada a agentes federales para una mayor investigación? Usted proporciona "datos de entrenamiento", como documentos de ejemplo clasificados, al algoritmo de aprendizaje, que luego puede "categorizar" nuevos documentos en las mismas categorías utilizando el conocimiento existente.

El enfoque más común para la clasificación de documentos es utilizar un modelo un conjunto de palabras combinado con un clasificador ingenuo de Bayes. Modelo un conjunto de palabras percibe el documento como un revoltijo de palabras. "Johnny se comió el queso" para él es lo mismo que "Johnny se comió el queso"; ambos constan del mismo conjunto de palabras: ("Johnny", "comió", "queso").

Descarga la nota en formato o, ejemplos en formato

Una breve introducción a la teoría de la probabilidad. La expresión p() se utiliza para denotar probabilidad. Por ejemplo, p(A) = 0 , 2 significa que el evento A ocurrirá con una probabilidad del 20%. Expresiones como p(A|B) se utilizan para indicar probabilidades condicionales. Por ejemplo, p(A|B) = 0,3 significa que la probabilidad del evento A, dado que ocurre el evento B, es del 30%. La probabilidad conjunta p(A, B) se utiliza para indicar la probabilidad de que los eventos A y B ocurran simultáneamente. Si los eventos A y B son independientes, entonces p(A, B) = p(A) * p(B). Si los eventos A y B son dependientes, entonces p(A, B) = p(A) * p(B|A).

Como ejemplo, estudiaremos los tweets sobre un servicio de envío de correos electrónicos: Mandrill.com. Al buscar por palabra clave - mandril– además de los útiles, también aparecen enlaces que no son relevantes. Nuestro trabajo es filtrar los tweets relevantes. Digamos que previamente acumulamos una base de datos de 300 tweets: 150 sobre la aplicación Mandrill.com y 150 sobre otras.

Dividimos cada tweet en palabras individuales (llamadas tokens). simbólico). Nos interesan dos probabilidades:

p (aplicación | palabra1, palabra2...)
p (otro | palabra1, palabra2, ...)

Esta es la probabilidad de que el tweet sea sobre una aplicación o sobre otra cosa, dado que detectamos las palabras: “palabra1”, “palabra2”, etc.

(1) p (aplicación | palabra1, palabra2, ...) > p (otro | palabra1, palabra2, ...)

entonces este tweet es sobre Mandrill.com. Pero ¿cómo calcular estas probabilidades? El primer paso es utilizar el teorema de Bayes, que permite reescribir la probabilidad condicional de la aplicación como:

Similar

Sustituyendo (2) y (3) en (1) y multiplicando ambos lados por p(palabra1, palabra2, ...), obtenemos la condición (1) de la forma:

(4) p(adj.) * p(palabra1,palabra2,...|adj.) > p(otro) * p(palabra1,palabra2,...|otro)

La regla del máximo a posteriori (MAR) utilizada para el análisis permite, en primer lugar, no prestar atención a la diferencia en los valores de p (aplicación) y p (otro), y en segundo lugar, considerar las probabilidades de que aparezcan palabras en un tweet para ser independiente (¡aunque este no es el caso!), y reemplazar:

ð(palabra1,palabra2,…| aplicación) –> ð(palabra1| aplicación) * ð(palabra2| aplicación) * …
p(palabra1,palabra2,...|otro) –>

En la forma final, compararemos dos cantidades:

(5) p(palabra1| aplicación) * p(palabra2| aplicación) * … > p(palabra1|otro) * p(palabra2|otro) * …

El supuesto de independencia nos permite dividir la probabilidad condicional conjunta de un conjunto de palabras dada una clase conocida en las probabilidades de encontrar cada palabra en esa clase. Al tratar las palabras como independientes, introducimos muchos errores en el algoritmo MAP, pero al final no afectan la elección correcta entre el conjunto relacionado con la aplicación y otros tweets.

Quedan dos problemas por resolver: ¿qué hacer con las palabras raras y cómo vencer los valores cada vez más pequeños que aparecen al multiplicar un gran número de probabilidades cercanas a cero? Es costumbre sumar uno a cada valor (incluso cero). Esto se llama suavizado incremental y se utiliza a menudo para encajar palabras previamente desconocidas en un modelo de bolsa de palabras. Y en lugar de multiplicación, se utiliza la suma de logaritmos. Por ejemplo, tienes el producto: 0,2 * 0,8. Tome su logaritmo: ln(0,2 * 0,8) = ln(0,2) + ln(0,8).

Entonces, se dan todas las explicaciones y puede pasar a Excel. Las dos primeras páginas del libro de ejemplo contienen cada una 150 tweets relacionados con la aplicación Mandrill.com (Figura 1) y otros temas. Consistentemente, en el texto original de los tweets, todas las letras se reemplazan por minúsculas y luego los signos de puntuación por espacios. Por ejemplo, la fórmula en la celda E2 =SUSTITUIR(D2;"?";" ") - reemplaza todos los signos de interrogación en el texto contenido en la celda D2 con espacios.

Arroz. 1. Eliminar caracteres innecesarios en la base de datos de tweets sobre la aplicación (para ampliar la imagen, haga clic derecho sobre ella y seleccione Abierta la imagen en una nueva pestaña)

Ahora necesitamos contar cuántas veces se usa cada palabra en las publicaciones de una categoría determinada. Para hacer esto, debe recopilar todas las palabras de los tweets de cada base de datos en una columna. Suponiendo que cada tweet no contenga más de 30 palabras y con la intención de asignar a cada token su propia línea, necesitará 150 * 30 = 4500 líneas. Crea una nueva hoja, nómbrala Fichas_adj. Nombre de la celda A1 tuits. Copie los valores H2:H151 de la hoja al portapapeles Solicitud. Seleccionar en hoja Fichas_adj.área A2:A4501 y haga clic Insertar –> Inserto especial –> valores(Figura 2). Haga clic en Aceptar. Tenga en cuenta que, dado que está insertando 150 tweets en 4500 filas, Excel repite todo por usted. Esto significa que si resalta la primera palabra del primer tweet en la línea 2, ese mismo tweet se repetirá para resaltar la segunda palabra en la línea 152, la tercera en la línea 302, y así sucesivamente.

Estudia las fórmulas en las columnas B:D de la hoja. Fichas_adj. comprender la mecánica de extraer tokens secuencialmente de un tweet (Figura 3). Crea una hoja de la misma manera. Tokens_otro para una base de datos de tweets no relacionados con la aplicación Mandrill.com.

Arroz. 3. Fragmento de una hoja Fichas_adj., que recupera tokens de una base de datos de tweets relacionados con la aplicación Mandrill.com

Ahora basado en la hoja. Fichas_adj. debe crear una tabla dinámica que cuente el número de apariciones de cada token. Usando el filtro de la tabla dinámica, excluya palabras de hasta 4 caracteres y también agregue columnas para calcular el logaritmo de la frecuencia de aparición de un token (Fig. 4). Repetir la operación para la hoja. Tokens_otro

Ahora que el modelo clasificador está "entrenado", es hora de usarlo. en una hoja Prueba Se han publicado 20 tweets que es necesario clasificar. También se procesan (como en la Fig. 1). Coloca los tweets preparados en la hoja. Clasificación. Resalte D2:D21 y seleccione DATOS –> Texto de columna. En la ventana que aparece, seleccione Con delimitadores y presione Más. En el segundo paso, seleccione los caracteres de tabulación y espacio como separadores, y Contar delimitadores consecutivos como uno(Figura 5). Establecer el delimitador de línea (No). Hacer clic Más. en el ultimo paso Formato de datos de columna instalar general. Hacer clic Listo.

El procedimiento distribuirá los tweets en las columnas de toda la hoja hasta la columna AI (Fig. 6).

Ahora, usando la función BUSCARV, extraeremos datos sobre los logaritmos de las probabilidades de que los tokens de prueba ocurran en dos conjuntos de datos (aplicación/otros). Comparemos las cantidades y saquemos una conclusión sobre si las pruebas pertenecen a una clase u otra (Fig. 7). Se resaltan en color los tweets cuya diferencia logarítmica es inferior a 1. Más detalles sobre las fórmulas se pueden encontrar en la hoja Clasificación.

Eso es todo. Se construye el modelo, se hacen suposiciones.

Escrito basado en el libro de John Foreman. – M.: Editorial Alpina, 2016. – P. 101–128