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.

Regresión logística con Tall arrays

En este ejemplo se muestra cómo utilizar la regresión logística y otras técnicas para realizar análisis de datos en matrices altas. Los arrays altos representan datos demasiado grandes para caber en la memoria del ordenador.

Definir entorno de ejecución

Al ejecutar cálculos en matrices altas, el entorno de ejecución predeterminado utiliza la sesión de MATLAB® local o un grupo paralelo local (si tiene Parallel Computing Toolbox™). Puede utilizar la función para cambiar el entorno de ejecución.mapreducer Establezca el entorno de ejecución global para que sea la sesión de MATLAB local.

mapreducer(0) 

Obtenga datos en MATLAB

Cree un almacén de datos que hace referencia a la ubicación de la carpeta con los datos. Los datos pueden estar contenidos en un único archivo, una colección de archivos o una carpeta completa. Trate los valores como datos faltantes para que los Reemplace con valores.'NA'datastoreNaN Seleccione un subconjunto de las variables con las que trabajar e incluya el nombre de la aerolínea () como variable categórica.UniqueCarrier Cree una tabla alta en la parte superior del almacén de datos.

ds = datastore('airlinesmall.csv'); ds.TreatAsMissing = 'NA'; ds.SelectedVariableNames = {'DayOfWeek','UniqueCarrier',...     'ArrDelay','DepDelay','Distance'}; ds.SelectedFormats{2} = '%C'; tt = tall(ds); tt.DayOfWeek = categorical(tt.DayOfWeek,1:7,...     {'Sun','Mon','Tues','Wed','Thu','Fri','Sat'},'Ordinal',true) 
 tt =    Mx5 tall table      DayOfWeek    UniqueCarrier    ArrDelay    DepDelay    Distance     _________    _____________    ________    ________    ________          ?              ?             ?           ?           ?             ?              ?             ?           ?           ?             ?              ?             ?           ?           ?             :              :             :           :           :         :              :             :           :           :  

Los vuelos finales

Determine los vuelos que se retrasan 20 minutos o más definiendo una variable lógica que es verdadera para un vuelo tardío. Agregue esta variable a la tabla de datos alta, señalando que aún no se ha evaluado. Una vista previa de esta variable incluye las primeras filas.

tt.LateFlight = tt.ArrDelay>=20 
 tt =    Mx6 tall table      DayOfWeek    UniqueCarrier    ArrDelay    DepDelay    Distance    LateFlight     _________    _____________    ________    ________    ________    __________          ?              ?             ?           ?           ?            ?              ?              ?             ?           ?           ?            ?              ?              ?             ?           ?           ?            ?              :              :             :           :           :            :         :              :             :           :           :            :  

Calcule la media de determinar la proporción total de vuelos tardíos.LateFlight Se usa para desencadenar la evaluación de la matriz alta y llevar el resultado a la memoria.gather

m = mean(tt.LateFlight) 
 m =    tall double      ?  
m = gather(m) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.3 sec - Pass 2 of 2: Completed in 1.5 sec Evaluation completed in 3.3 sec  m =      0.1580  

Los vuelos finales de Carrier

Examine si ciertos tipos de vuelos tienden a retrasarse. En primer lugar, compruebe si ciertos transportistas tienen más probabilidades de tener vuelos tardíos.

tt.LateFlight = double(tt.LateFlight); late_by_carrier = gather(grpstats(tt,'UniqueCarrier','mean','DataVar','LateFlight')) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 5.3 sec Evaluation completed in 6.4 sec  late_by_carrier =    29x4 table      GroupLabel    UniqueCarrier    GroupCount    mean_LateFlight     __________    _____________    __________    _______________       '9E'            9E                521           0.13436          'AA'            AA              14930           0.16236          'AQ'            AQ                154          0.051948          'AS'            AS               2910           0.16014          'B6'            B6                806           0.23821          'CO'            CO               8138           0.16319          'DH'            DH                696           0.17672          'DL'            DL              16578           0.15261          'EA'            EA                920           0.15217          'EV'            EV               1699           0.21248          'F9'            F9                335           0.18209          'FL'            FL               1263           0.19952          'HA'            HA                273          0.047619          'HP'            HP               3660           0.13907          'ML (1)'        ML (1)             69          0.043478          'MQ'            MQ               3962           0.18778          'NW'            NW              10349           0.14542          'OH'            OH               1457           0.18874          'OO'            OO               3090           0.13916          'PA (1)'        PA (1)            318           0.16981          'PI'            PI                871            0.1814          'PS'            PS                 83           0.13253          'TW'            TW               3805             0.159          'TZ'            TZ                216             0.125          'UA'            UA              13286           0.17447          'US'            US              13997           0.15296          'WN'            WN              15931           0.13722          'XE'            XE               2357           0.17947          'YV'            YV                849           0.19081      

Portadores y tienen mayores proporciones de vuelos tardíos.B6EV Portadores,, y tienen relativamente pocos vuelos, pero las proporciones más bajas de ellos son tarde.AQML(1)HA

Los últimos vuelos por día de la semana

A continuación, compruebe si los diferentes días de la semana tienden a tener vuelos posteriores.

late_by_day = gather(grpstats(tt,'DayOfWeek','mean','DataVar','LateFlight')) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 3.3 sec Evaluation completed in 3.9 sec  late_by_day =    7x4 table      GroupLabel    DayOfWeek    GroupCount    mean_LateFlight     __________    _________    __________    _______________        'Fri'         Fri          15839           0.12899           'Mon'         Mon          18077           0.14234           'Sat'         Sat          16958           0.15603           'Sun'         Sun          18019           0.15117           'Thu'         Thu          18227           0.18418           'Tues'        Tues         18163           0.15526           'Wed'         Wed          18240           0.18399      

Los miércoles y jueves tienen la mayor proporción de vuelos tardíos, mientras que los viernes tienen la menor proporción.

Vuelos tardíos por distancia

Compruebe si los vuelos más largos o más cortos tienden a llegar tarde. Primero, mire la densidad de la distancia de vuelo para los vuelos que son retrasados, y compare eso con los vuelos que están a tiempo.

ksdensity(tt.Distance(tt.LateFlight==1)) hold on ksdensity(tt.Distance(tt.LateFlight==0)) hold off legend('Late','On time') 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.8 sec - Pass 2 of 2: Completed in 1.4 sec Evaluation completed in 3.8 sec Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.4 sec - Pass 2 of 2: Completed in 1.6 sec Evaluation completed in 3.5 sec 

La distancia de vuelo no hace una diferencia dramática en si un vuelo es temprano o tarde. Sin embargo, la densidad parece ser ligeramente mayor para los vuelos a tiempo a distancias de aproximadamente 400 millas. La densidad también es mayor para los vuelos tardíos a distancias de aproximadamente 2000 millas. Calcule algunas estadísticas descriptivas simples para los vuelos tardíos y a tiempo.

late_by_distance = gather(grpstats(tt,'LateFlight',{'mean' 'std'},'DataVar','Distance')) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.9 sec Evaluation completed in 3.7 sec  late_by_distance =    2x5 table      GroupLabel    LateFlight    GroupCount    mean_Distance    std_Distance     __________    __________    __________    _____________    ____________         '0'            0          1.04e+05        693.14           544.75           '1'            1             19519        750.24           574.12     

Los vuelos tardíos son aproximadamente 60 millas más largo en promedio, aunque este valor constituye sólo una pequeña porción de la desviación estándar de los valores de distancia.

Modelo de regresión logística

Cree un modelo para la probabilidad de un vuelo tardío, utilizando variables continuas (como) y variables categóricas (como por ejemplo) para predecir las probabilidades.DistanceDayOfWeek Este modelo puede ayudar a determinar si los resultados previos observados para cada predictor individualmente también son verdaderos cuando los consideras juntos.

glm = fitglm(tt,'LateFlight~Distance+DayOfWeek','Distribution','binomial') 
Iteration [1]:   0% completed Iteration [1]:  100% completed Iteration [2]:   0% completed Iteration [2]:  100% completed Iteration [3]:   0% completed Iteration [3]:  100% completed Iteration [4]:   0% completed Iteration [4]:  100% completed Iteration [5]:   0% completed Iteration [5]:  100% completed  glm =    Compact generalized linear regression model:     logit(LateFlight) ~ 1 + DayOfWeek + Distance     Distribution = Binomial  Estimated Coefficients:                        Estimate         SE         tStat       pValue                         __________    __________    _______    __________      (Intercept)           -1.855      0.023052    -80.469             0     DayOfWeek_Mon      -0.072603      0.029798    -2.4365       0.01483     DayOfWeek_Tues      0.026909      0.029239    0.92029       0.35742     DayOfWeek_Wed         0.2359      0.028276      8.343    7.2452e-17     DayOfWeek_Thu        0.23569      0.028282     8.3338    7.8286e-17     DayOfWeek_Fri       -0.19285      0.031583     -6.106    1.0213e-09     DayOfWeek_Sat       0.033542      0.029702     1.1293       0.25879     Distance          0.00018373    1.3507e-05     13.602    3.8741e-42   123319 observations, 123311 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 504, p-value = 8.74e-105 

El modelo confirma que las conclusiones anteriormente observadas también son verdaderas aquí:

  • Los coeficientes de miércoles y jueves son positivos, lo que indica una mayor probabilidad de un vuelo tardío en esos días. El coeficiente del viernes es negativo, lo que indica una probabilidad menor.

  • El coeficiente de distancia es positivo, lo que indica que los vuelos más largos tienen una mayor probabilidad de llegar tarde.

Todos estos coeficientes tienen valores p muy pequeños. Esto es común con los conjuntos de datos que tienen muchas observaciones, ya que uno puede estimar confiablemente efectos pequeños con grandes cantidades de datos. De hecho, la incertidumbre en el modelo es mayor que la incertidumbre en las estimaciones de los parámetros del modelo.

Predicción con Model

Predecir la probabilidad de un vuelo tardío para cada día de la semana, y para distancias que van desde 0 hasta 3000 millas. Cree una tabla para contener los valores predictores indexando las primeras 100 filas de la tabla original.tt

x = gather(tt(1:100,{'Distance' 'DayOfWeek'})); x.Distance = linspace(0,3000)'; x.DayOfWeek(:) = 'Sun'; plot(x.Distance,predict(glm,x));  days = {'Sun' 'Mon' 'Tues' 'Wed' 'Thu' 'Fri' 'Sat'}; hold on for j=2:length(days)     x.DayOfWeek(:) = days{j};     plot(x.Distance,predict(glm,x)); end legend(days) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.48 sec Evaluation completed in 0.87 sec 

Según este modelo, un vuelo de miércoles o jueves de 500 millas tiene la misma probabilidad de llegar tarde, alrededor del 18%, como un vuelo del viernes de aproximadamente 3000 millas.

Dado que estas probabilidades son mucho menores que el 50%, es poco probable que el modelo prevea que un vuelo determinado se retrasará con esta información. Investigue el modelo más centrándose en los vuelos para los que el modelo predice una probabilidad de 20% o más de llegar tarde, y compare eso con los resultados reales.

C = gather(crosstab(tt.LateFlight,predict(glm,tt)>.20)) 
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.8 sec Evaluation completed in 1.9 sec  C =         99613        4391        18394        1125  

Entre los vuelos pronosticados que tienen una probabilidad del 20% o mayor de llegar tarde, alrededor del 20% se retrasaron.1125/(1125 + 4391) Entre el resto, menos del 16% se retrasaron.18394/(18394 + 99613)