Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Detectar valores atípicos mediante regresión cuantil

Este ejemplo muestra cómo detectar valores atípicos mediante el bosque aleatorio cuantil. El bosque aleatorio cuantil puede detectar valores atípicos con respecto a la distribución condicional de

<math display="block">
<mrow>
<mi>Y</mi>
</mrow>
</math>
Dado
<math display="block">
<mrow>
<mi>X</mi>
</mrow>
</math>
. Sin embargo, este método no puede detectar valores atípicos en los Datos predictores. Para la detección de valores atípicos en los Datos predictores utilizando una bolsa de árboles de decisión, consulte la propiedad de un modelo.OutlierMeasureTreeBagger

Una es una observación que se encuentra lo suficientemente lejos de la mayoría de las otras observaciones en un conjunto de datos y puede considerarse anómala.outlier Las causas de las observaciones periféricas incluyen variabilidad inherente o error de medición. Los valores atípicos afectan significativamente a las estimaciones y a la inferencia, por lo que es importante detectarlos y decidir si eliminarlos o considerar un análisis robusto.

El software estadísticas y machine learning Toolbox™ proporciona varias funcionalidades para detectar o eliminar valores atípicos, incluidos:

  • — Calcular las puntuaciones de las observaciones.zscorez

  • — Estimación de la media de los datos, excluyendo los valores atípicos.trimmean

  • — Dibujar parcela de datos.boxplot

  • — Dibujar gráfica de probabilidad.probplot

  • — Estimar la covarianza robusta de los datos multivariados.robustcov

  • — Ajuste una máquina de vectores de soporte (SVM) de una clase para determinar qué observaciones se encuentran lejos del límite de decisión.fitcsvm

Para demostrar la detección de valores atípicos, este ejemplo:

  1. Genera datos de un modelo no lineal con heteroscedasticidad y simula algunos valores atípicos.

  2. Crece un bosque aleatorio cuantil de árboles de regresión.

  3. Estima cuarles condicionales (

    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>Q</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    </mrow>
    </math>
    ,
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>Q</mi>
    </mrow>
    <mrow>
    <mn>2</mn>
    </mrow>
    </msub>
    </mrow>
    </math>
    Y
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>Q</mi>
    </mrow>
    <mrow>
    <mn>3</mn>
    </mrow>
    </msub>
    </mrow>
    </math>
    ) y el rango intercuartil (
    <math display="block">
    <mrow>
    <mi>I</mi>
    <mi>Q</mi>
    <mi>R</mi>
    </mrow>
    </math>
    ) dentro de los rangos de las variables predictoras.

  4. Compara las observaciones con las, que son las cantidadesfences

    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>F</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    <mo>=</mo>
    <msub>
    <mrow>
    <mi>Q</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    <mo>-</mo>
    <mn>1</mn>
    <mo>.</mo>
    <mn>5</mn>
    <mi>I</mi>
    <mi>Q</mi>
    <mi>R</mi>
    </mrow>
    </math>
    Y
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>F</mi>
    </mrow>
    <mrow>
    <mn>2</mn>
    </mrow>
    </msub>
    <mo>=</mo>
    <msub>
    <mrow>
    <mi>Q</mi>
    </mrow>
    <mrow>
    <mn>3</mn>
    </mrow>
    </msub>
    <mo>+</mo>
    <mn>1</mn>
    <mo>.</mo>
    <mn>5</mn>
    <mi>I</mi>
    <mi>Q</mi>
    <mi>R</mi>
    </mrow>
    </math>
    . Cualquier observación que sea menor que
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>F</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    </mrow>
    </math>
    o mayor que
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>F</mi>
    </mrow>
    <mrow>
    <mn>2</mn>
    </mrow>
    </msub>
    </mrow>
    </math>
    es un outlier.

Generar datos

Genere 500 observaciones del modelo

<math display="block">
<mrow>
<msub>
<mrow>
<mi>y</mi>
</mrow>
<mrow>
<mi>t</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>1</mn>
<mn>0</mn>
<mo>+</mo>
<mn>3</mn>
<mi>t</mi>
<mo>+</mo>
<mi>t</mi>
<mi mathvariant="normal">sin</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<msub>
<mrow>
<mi>ε</mi>
</mrow>
<mrow>
<mi>t</mi>
</mrow>
</msub>
<mo>.</mo>
</mrow>
</math>

<math display="block">
<mrow>
<mi>t</mi>
</mrow>
</math>
se distribuye uniformemente entre 0 y
<math display="block">
<mrow>
<mn>4</mn>
<mi>π</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>ε</mi>
</mrow>
<mrow>
<mi>t</mi>
</mrow>
</msub>
<mo></mo>
<mi>N</mi>
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mi>t</mi>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
</math>
. Almacene los datos en una tabla.

n = 500; rng('default'); % For reproducibility t = randsample(linspace(0,4*pi,1e6),n,true)'; epsilon = randn(n,1).*sqrt((t+0.01)); y = 10 + 3*t + t.*sin(2*t) + epsilon;  Tbl = table(t,y);

Mueva cinco observaciones en una dirección vertical aleatoria en un 90% del valor de la respuesta.

numOut = 5; [~,idx] = datasample(Tbl,numOut); Tbl.y(idx) = Tbl.y(idx) + randsample([-1 1],numOut,true)'.*(0.9*Tbl.y(idx));

Dibuje un gráfico de dispersión de los datos e identifique los valores atípicos.

figure; plot(Tbl.t,Tbl.y,'.'); hold on plot(Tbl.t(idx),Tbl.y(idx),'*'); axis tight; ylabel('y'); xlabel('t'); title('Scatter Plot of Data'); legend('Data','Simulated outliers','Location','NorthWest');

Cultivar el bosque aleatorio de quantile

Cultivar una bolsa de 200 árboles de regresión usando.TreeBagger

Mdl = TreeBagger(200,Tbl,'y','Method','regression');

es un conjunto.MdlTreeBagger

Predecir cuartil condicional y rangos Intercuartículas

Utilizando la regresión cuantitativa, calcule los cuartil condicionales de 50 valores igualmente espaciados dentro del rango de.t

tau = [0.25 0.5 0.75]; predT = linspace(0,4*pi,50)'; quartiles = quantilePredict(Mdl,predT,'Quantile',tau);

es una matriz de 500-por-3 de cuarles condicionales.quartiles Las filas corresponden a las observaciones y las columnas corresponden a las probabilidades en.ttau

En el gráfico de dispersión de los datos, trace la media condicional y las respuestas de la mediana.

meanY = predict(Mdl,predT);  plot(predT,[quartiles(:,2) meanY],'LineWidth',2); legend('Data','Simulated outliers','Median response','Mean response',...     'Location','NorthWest'); hold off;

Aunque la media condicional y las curvas medianas están próximas, los valores atípicos simulados pueden afectar a la curva media.

Calcule el condicional

<math display="block">
<mrow>
<mi>I</mi>
<mi>Q</mi>
<mi>R</mi>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
.

iqr = quartiles(:,3) - quartiles(:,1); k = 1.5; f1 = quartiles(:,1) - k*iqr; f2 = quartiles(:,3) + k*iqr;

significa que todas las observaciones menores o mayores que se consideran valores atípicos, pero este umbral no elimina la ambigüedad de los valores atípicos extremos.k = 1.5f1f2 A de identifica valores atípicos extremos.k3

Comparar observaciones a cercas

Trazar las observaciones y las vallas.

figure; plot(Tbl.t,Tbl.y,'.'); hold on plot(Tbl.t(idx),Tbl.y(idx),'*'); plot(predT,[f1 f2]); legend('Data','Simulated outliers','F_1','F_2','Location','NorthWest'); axis tight title('Outlier Detection Using Quantile Regression') hold off

Todos los valores atípicos simulados caen fuera

<math display="block">
<mrow>
<mo stretchy="false">[</mo>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>,</mo>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo stretchy="false">]</mo>
</mrow>
</math>
, y algunas observaciones están fuera de este intervalo también.

Consulte también

Clases

Funciones

Temas relacionados