Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Todas as três etapas são essencialmente a mesma, diferindo entre si apenas em quais das colunas serão rodados os testes. No primeiro considera-se como hierarquia superior a Dexco como um todo e como hierarquia inferior a coluna grupo_divisao, esta é então hierarquia superior na segunda etapa sendo divisao a hierarquia inferior, finalmente na terceira etapa divisao é a hierarquia superior e centro de custo a herarquia inferior.

As etapas interna internas do modelo são:

  1. Seleção de uma janela de 6 meses:
    A coluna time é varrida em cada iteração do modelo para uma seleção de uma janela de seis meses. A cada interação desloca-se um mês para a frente, e então o modelo é rodado novamente, até ter varrido todo o intervalo de meses disponíveis na base. Assim,

    • na primeira interação, constam-se os meses de janeiro até junho

    • na segunda interação, constam-se os meses de fevereiro até julho

    • na terceira interação, constam-se os meses de março até agosto
      e assim por diante.

  2. Interação Iteração entre os valores da herarquia superior e da hierarquia inferior

  3. Criação de novas variáveis:

    horas_variavel_superior: soma das horas de absenteísmo na hierarquia superior
    horas_esperadas_superior: soma das horas previstas na hierarquia superior
    proporcao_sup: divisão das colunas horas_variavel_superior/horas_esperadas_superior

    horas_variavel_inferior: soma das horas de absenteísmo na hierarquia inferior
    horas_esperadas_inferior: soma das horas previstas na hierarquia inferior
    proporcao_inf: divisão das colunas horas_variavel_inferior/horas_esperadas_inferior

  4. As variáveis do modelo:

    O modelo em si consiste em uma analogia com o jogo de uma moeda: lança-se uma moeda n vezes e pergunta-se “a moeda é viciada?”.


    A analogia consiste em tratar como um lance que deu “cara” cada vez que se registrar um colaborador que naquele mês de referência tenha tido mais faltas que o proporcional registrado na hierarquia superior, ou seja que a variável proporcao_sup. Registra-se como “coroa” o colaborador que tenha faltas abaixo desse limite:

    • headsmétrica de absenteísmo > proporcao_sup

    • tailsmétrica de absenteísmo < proporcao_sup

      métrica de absenteísmo são as métricas fltas_sem_afast, faltas_abon etc

      A proporção heads / heads + tails é a proporção de caras em relação ao total de vezes que essa ‘moeda’ foi lançada. E esse valor será usado para o teste estatístico tendo a hierarquia superior como moeda de referência.

Após isso, verifica-se a quantidade de ‘caras’ e ‘coroas’ na hierarquia inferior e verifica-se a proporção
heads_inferior / heads_inferior + tails_inferior e obtem-se assim a proporção de ‘caras’ e ‘coroas’ dessa ‘moeda’ na hierarquia inferior. Esse valor será usado para se testar a ‘moeda’ lançada na hierarquia inferior contra a ‘moeda’ lançada na superior e responder à questão proposta acima.

O teste usado é um teste Z entre essas proporções.

  • time [timestamp]: Data de referência para a variável.

  • geoarea_id [string]: Divisão associada ao dado.

  • modeling_unit_id [bigint]: Identitificação do colaborador.

  • variable [string]: Variável referente ao valor.

    • banco_horas_credito: Total de banco de horas em crédito.

    • banco_horas_debito: Total de banco de horas em débto.

    • banco_horas_mes: Total do banco de horas do mês.

    • faltas_injust: Horas em faltas injustificadas.

    • faltas_just: Horas em faltas justificadas.

    • hrs_prev: Horas previstas.

    • total_horas_extras: Total de horas extra feitas.

  • transformation [string]: A transformação que foi aplicada na variável, valores possíveis: [

    • cum__3: Acumulado dos últimos 3 meses.

    • cum__6: Acumulado dos últimos 6 meses.

    • lag__-1: Valor correspondente ao próximo mês (saída do modelo).

    • lag__0: Valor para o mês atual.

    • lag__1: Valor para o mês anterior.

    • lag__2: Valor para 2 meses atrás.

    • lag__3: Valor para 3 meses atrás.

  • value [double]: Valor correspondente para time/geoarea_id/modeling_unit_id/variable/transformation.

Construção da matriz para o modelo

Workspace/people-analytics-absenteismo/02__modelos/propensao_absenteismo/02__contrucao_matrix.py

Entradas:

absenteimo_prep.sap__informacoes_cadastrais

absenteimo_prep.propensao_absenteismo__absenteismo_lags

Saída:

absenteimo_prep.propensao_absenteismo__model_matrix

Coloca as variáveis que estão no formato long em um formato wide para que possam ser colocadas no modelo. Faz o calculo do % de horas por cada tipo de absenteísmo/hora extra/banco de hora de acordo com o total de horas esperado para o mês.

Como resultado retorna a tabela absenteimo_prep.propensao_absenteismo__model_matrix com os seguintes campos.

  • id [bigint]: Identificador da linha

  • modeling_unit_id [bigint]: Id do colaborador no SAP

  • dat_nasc [timestamp]: Data de nascimento do colaborador

  • idade [string]: Idade do colaborador (está como string mas é um integer)

  • sexo [string]: Sexo do colaborador.

  • est_civil [string]: Estado civil do colaborador.

  • descricao_atividade4 [string]: Código de descrição da atividade no SAP.

  • local_fisico [string]: Local fisíco do colaborador.

  • unidade_organizacional [string]: Unidade organizacional.

  • divisao_id [string]: Identificador da divisão no SAP.

  • divisao [string]: Descrição da divisão no SAP.

  • centro_de_custo_id [string]: Identificador do centro de custo no SAP.

  • centro_de_custo [string]: Descrição do centro de custo no SAP.

  • des_org_sup [string]: ?

  • gestor_imed [string]: Nome do gestor imediato responsável pelo colaborador.

  • nivel_superior_tipo_unid [string]: ?

  • descritivo_tipo_unid [string]: ?

  • dtadmissao [string]: Data de admição no formato dd/mm/yyyy.

  • temp_emp [string]: Tempo de empresa, está em string mas na verdade é inteiro.

  • mot_aum [string]: Motivo pelo aumento que foi dado.

  • time [timestamp]: Data de referência dos dados.

  • time_ult_aum [timestamp]: Data que foi dado o último aumento.

  • temp_ult_aum [timestamp]: Tempo desde o último aumento (está como string mas é double).

  • afastamentos__cum__3 [double]: Horas em afastamento nos últimos 3 meses.

  • atestados__cum__3 [double]: Horas em atestado nos últimos 3 meses.

  • banco_horas_credito__cum__3 [double]: Horas no banco de horas em crédito nos últimos 3 meses.

  • banco_horas_debito__cum__3 [double]: Horas no banco de horas em débito nos últimos 3 meses.

  • faltas_injust__cum__3 [double]: Horas em faltas injustificadas nos últimos 3 meses.

  • faltas_just__cum__3 [double]: Horas em faltas justificadas nos últimos 3 meses.

  • hrs_prev__cum__3 [double]: Horas previstas nos últimos 3 meses.

  • output__lag__-1 [double]: Valor definido pela coluna output_name adiantado em um mês para executar o modelo preditivo.

  • total__lag__-1 [double]: Total de horas adiantando em um mês para fazer o calculo do % de horas totais do output__lag__-1.

  • percent_output [double]: Divisão das colunas output__lag__-1/total__lag__-1

  • percent_atestados__cum__3 [double]: Divisão das colunas atestados__cum__3/hrs_prev__cum__3

  • percent_banco_horas_credito__cum__3 [double]: Divisão das colunas banco_horas_credito__cum__3/hrs_prev__cum__3

  • percent_banco_horas_debito__cum__3 [double]: Divisão das colunas banco_horas_debito__cum__3/hrs_prev__cum__3

  • percent_faltas_injust__cum__3 [double]: Divisão das colunas faltas_injust__cum__3/hrs_prev__cum__3

  • percent_faltas_just__cum__3 [double]: Divisão das colunas faltas_just__cum__3/hrs_prev__cum__3

  • age [double]: Idade do colaborador em anos de acordo com a data de nascimento e tempo de referência.

  • output_name [string]: Identificador sobre qual é a saído da coluna output__lag__-1.

Inclusão dos dados do SOC às info de absenteísmo

Workspace/people-analytics-absenteismo/02__modelos/propensao_absenteismo/03__merge_SOC_info.py

Entrada:

  • absenteimo_prep.propensao_absenteismo__model_matrix

  • absenteimo_prep.soc__agregado_centro_de_custo__com_depara

  • absenteimo_prep.soc__depara_divisao

Saída:

  • absenteimo_prep.propensao_absenteismo__model_matrix__1

Une os dados do SOC aos dados de absenteísmo. Como resultado gera a tabela propensao_absenteismo__model_matrix__1 com as seguintes informações:

...

id [bigint]: Identificador da linha

...

modeling_unit_id [bigint]: Id do colaborador no SAP

...

dat_nasc [timestamp]: Data de nascimento do colaborador

...

idade [string]: Idade do colaborador (está como string mas é um integer)

...

sexo [string]: Sexo do colaborador.

...

est_civil [string]: Estado civil do colaborador.

...

descricao_atividade4 [string]: Código de descrição da atividade no SAP.

...

local_fisico [string]: Local físico do colaborador.

...

unidade_organizacional [string]: Unidade organizacional.

...

divisao_id [string]: Identificador da divisão no SAP.

...

divisao [string]: Descrição da divisão no SAP.

...

centro_de_custo_id [string]: Identificador do centro de custo no SAP.

...

centro_de_custo [string]: Descrição do centro de custo no SAP.

...

des_org_sup [string]: ?

...

gestor_imed [string]: Nome do gestor imediato responsável pelo colaborador.

...

nivel_superior_tipo_unid [string]: ?

...

descritivo_tipo_unid [string]: ?

...

dtadmissao [string]: Data de admição no formato dd/mm/yyyy.

...

temp_emp [string]: Tempo de empresa, está em string mas na verdade é inteiro.

...

mot_aum [string]: Motivo pelo aumento que foi dado.

...

time [timestamp]: Data de referência dos dados.

...

time_ult_aum [timestamp]: Data que foi dado o último aumento.

...

temp_ult_aum [timestamp]: Tempo desde o último aumento (está como string mas é double).

...

afastamentos__cum__3 [double]: Horas em afastamento nos últimos 3 meses.

...

atestados__cum__3 [double]: Horas em atestado nos últimos 3 meses.

...

banco_horas_credito__cum__3 [double]: Horas no banco de horas em crédito nos últimos 3 meses.

...

banco_horas_debito__cum__3 [double]: Horas no banco de horas em débito nos últimos 3 meses.

...

faltas_injust__cum__3 [double]: Horas em faltas injustificadas nos últimos 3 meses.

...

faltas_just__cum__3 [double]: Horas em faltas justificadas nos últimos 3 meses.

...

hrs_prev__cum__3 [double]: Horas previstas nos últimos 3 meses.

...

output__lag__-1 [double]: Valor definido pela coluna output_name adiantado em um mês para executar o modelo preditivo.

...

total__lag__-1 [double]: Total de horas adiantando em um mês para fazer o calculo do % de horas totais do output__lag__-1.

...

percent_output [double]: Divisão das colunas output__lag__-1/total__lag__-1

...

percent_atestados__cum__3 [double]: Divisão das colunas atestados__cum__3/hrs_prev__cum__3

...

percent_banco_horas_credito__cum__3 [double]: Divisão das colunas banco_horas_credito__cum__3/hrs_prev__cum__3

...

percent_banco_horas_debito__cum__3 [double]: Divisão das colunas banco_horas_debito__cum__3/hrs_prev__cum__3

...

age [double]: Idade do colaborador em anos de acordo com a data de nascimento e tempo de referência.

...

output_name [string]: Identificador sobre qual é a saído da coluna output__lag__-1.

...

soc__acidentes [double]: Contagem do centro de custo de atestados ligados à acidentes.

...

soc__dental [double]: Contagem do centro de custo de atestados ligados à dental.

...

soc__diarreia [double]: Contagem do centro de custo de atestados ligados à diarréia.

...

soc__esforco_fisico_costas [double]: Contagem de diagnósticos do centro de custo de atestados ligados à esforço físico nas costas.

...

soc__esforco_fisico_geral [double]: Contagem de diagnósticos do centro de custo de atestados ligados à esforço físico geral.

...

soc__esforco_fisico_inferior [double]: Contagem de diagnósticos do centro de custo de atestados ligados à esforço físico ligados ao membro inferior.

...

soc__esforco_fisico_superior [double]: Contagem de diagnósticos do centro de custo de atestados ligados à esforço físico ligados ao membro superior.

...

soc__infecciosas_epidemica [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças epidêmicas (gripe, covid, conjuntivite, …).

...

soc__infecciosas_nao_epidemica [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças não epidêmicas (verminoses, doenças crônicas, etc…).

...

soc__mal_nutricao [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças não epidêmicas (verminoses, doenças crônicas, etc…).

...

soc__mental [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças de saúde mental.

...

soc__nao_relacionadas [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças de não relacionadas.

...

soc__pouco_especifico [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças pouco específicos com ex.: CIDs ZZ.

...

soc__dental__por_col [double]: Prevalência (contagem de atestados por colaborador) do centro de custo de atestados ligados à acidentes.

...

soc__diarreia__por_col [double]: Prevalência (contagem de atestados por colaborador) do centro de custo de atestados ligados à diarréia.

...

soc__esforco_fisico_costas__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à esforço físico nas costas.

...

soc__esforco_fisico_geral__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à esforço físico geral.

...

soc__esforco_fisico_inferior__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à esforço físico ligados ao membro inferior.

...

soc__esforco_fisico_superior__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à esforço físico ligados ao membro superior.

...

soc__infecciosas_epidemica__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à doenças epidêmicas (gripe, covid, conjuntivite, …).

...

soc__infecciosas_nao_epidemica__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à doenças não epidêmicas (verminoses, doenças crônicas, etc…).

...

soc__mal_nutricao__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à doenças não epidêmicas (verminoses, doenças crônicas, etc…).

...

soc__mental__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à doenças de saúde mental.

...

soc__nao_relacionadas__por_col [double]: Prevalência (contagem de atestados por colaborador) de diagnósticos do centro de custo de atestados ligados à doenças de não relacionadas.

...

soc__pouco_especifico__por_col [double]: Contagem de diagnósticos do centro de custo de atestados ligados à doenças pouco específicos com ex.: CIDs ZZ.

...

grupo_divisao [string]: Divisão agrupada em metais, louças, madeira, flora, …

Ajuste das variáveis para entrada no modelo

Workspace/people-analytics-absenteismo/02__modelos/propensao_absenteismo/04__ajuste_das_variaveis.py

Entrada:

absenteimo_prep.propensao_absenteismo__model_matrix__1

Saída:

absenteimo_prep.propensao_absenteismo__model_matrix__final

Criação dos cortes das variáveis de tempo de empresa, idade, normalização dos motivos de aumento, e conversão de campos numéricos que estavam como string. Retorna a tabela absenteimo_prep.propensao_absenteismo__model_matrix__final que será utilizada para a estimação do modelo

como a estrutura igual à absenteimo_prep.propensao_absenteismo__model_matrix__1 mais as seguintes colunas:

  • temp_ult_aum__cuted [string]: Informações de tempo desde o último aumento discretizada,

  • temp_emp__cuted [string]: Informações de tempo de empresa discretizada,

Modelo de previsão de presença de falta no próximo mês

Entrada:

absenteimo_prep.propensao_absenteismo__model_matrix__final

Saída:

absenteimo.propensao_absenteismo__model_coef_summary
absenteimo.propensao_absenteismo__melted_effects
absenteimo.propensao_absenteismo__melted_variables
absenteimo.propensao_absenteismo__variable_and_effects

Corresponde ao modelo de previsão de presença de faltas abertas por cada um dos tipos de faltas. É considerado um colabora em falta se ele apresenta mais de 2.5% de horas em falta em relação ao total de horas previstas para o mês.

É feita uma seleção de variáveis para cada um dos modelos através de stepwise na direção forward. As tabelas de resultados correspondem aos parâmetros associados à cada uma das variáveis e os efeitos e variáveis de entrada no forma to wide e long para a criação dos dashboards.

absenteimo.propensao_absenteismo__model_coef_summary

Coeficientes vindos do modelo com significância e valores estimados

absenteimo.propensao_absenteismo__melted_effects

Valores dos efeitos de cada uma das variáveis em formato long para a criação dos dashboards.

absenteimo.propensao_absenteismo__melted_variables

Valores das variáveis no formato melted para a criação dos dashboards

absenteimo.propensao_absenteismo__variable_and_effects

Valores dos efeitos, variáveis e previsão no formato wide para utilização dos dashboards.

Criação das bases de dados que serão consumidas nos dashboards

Workspace/people-analytics-absenteismo/02__modelos/propensao_absenteismo/06__criacao_bases_dashboard.py

Entradas:

absenteimo.propensao_absenteismo__model_coef_summary
absenteimo.propensao_absenteismo__melted_effects
absenteimo.propensao_absenteismo__melted_variables
absenteimo.propensao_absenteismo__variable_and_effects
recursos_humanos.zitrhr023

Saídas:

absenteimo.propensao_absenteismo_dash__dim_nomes
absenteimo.propensao_absenteismo_dash__dim_grupo_divisao
absenteimo.propensao_absenteismo_dash__dim_divisao
absenteimo.propensao_absenteismo_dash__dim_descricao_atividade4
absenteimo.propensao_absenteismo_dash__dim_centro_de_custo
absenteimo.propensao_absenteismo_dash__dim_gestor_imediato
absenteimo.propensao_absenteismo_dash__dim_id_modelos
absenteimo.propensao_absenteismo_dash__dim_variables
absenteimo.propensao_absenteismo_dash__prediction
absenteimo.propensao_absenteismo_dash__melted_variables
absenteimo.propensao_absenteismo_dash__melted_efects

...

Novas variáveis para o dash

A partir dos resultados do modelo, são criadas algumas variáveis para inserção no dashboard e para melhor interpretação pelo cliente.

O resultado do teste estatístico é um número real entre 0 e 1. Quanto mais próximo de zero mais estatisticamente significativo é o resultado para rejeitar a hipótese de que as métricas de absenteísmo observadas nas hierarquias superior e inferior são frutos do acaso, ou seja, a métrica observada está sim se descolando. Por outro lado, quanto mais próximo de 1, podemos dizer que o resultado não é significativo e a métrica não está se descolando.
O limite para se rejeitar a hipótese foi escolhido em 10%, ou seja, resultados de teste Z entre 0 e 0,1 são considerados significativos e devem acender um alerta para aquela unidade. Resultados maiores que 0,1 são considerados não significativos.

Foram criados os valores não significativo, probabilidade alta e probabilidade muito alta para resumir essas considerações. Esses valores devem ser lidos como:

  • não significativo: o teste não foi significativo e não se deve acender um alerta para aquela unidade naquela métrica de absenteísmo

  • probabilidade alta: a probabilidade de se estar observando um descolamento naquela unidade em relação aos seus pares é alta. Nesse caso, deve-se acender um alerta.

  • probabilidade muito alta: a probabilidade de se estar observando um descolamento naquela unidade em relação aos seus pares é muito alta. Nesse caso, deve-se acender um alerta.

Criação das bases de dados que serão consumidas nos dashboards

Workspace/people-analytics-absenteismo/02__modelos/metas_teste_estatístico/teste_merge_resultados_completo.py

Entradas:

absenteimo_prep.df__test__geral_grupo_divisao
absenteimo_prep.df__test__grupo_divisao_divisao
absenteimo_prep.df__test__divisao_centro_custo

Saídas:

absenteimo.metas_teste_estatistico__completo


Responsável por concatenar as tabelas resultantes dos modelos e a criação de uma base no formato star schema. As tabelas com dim__ correspondem às tabelas de dimensões sendo que as demais tabelas correspondem as tabelas fatofinal contendo todos os resultados, todos os valores de testes e todas as bandeiras (não significativo, probabilidade alta e muito alta) etc.

O script também é responsável por ajustar as variáveis para que fiquem em um formato mais executivo para ser apresentado no dashboard.