Para responder essa pergunta foi desenvolvida O modelo aqui desenvolvido visava uma técnica para a identificação de descolamentos de áreas ‘inferiores’ na hierarquia da empresa (por ex: centro de custo) em relação à sua 'superior' (por ex: fábrica) quanto às diversas métricas de absenteísmo. A ideia é Foi construído um modelo para identificar outliers através de um teste estatístico que gere resultados que podem gerasse como resultado uma métrica que pudesse responder à pergunta questão identificando esses descolamentos como mero acaso ou se estes são estatisticamente significativos, de forma que para estes possamos estabelecer uma série de alertas para as áreas que estão com descolamento frente às demais que podem ser conisderadas “pares”: testam-se .
Tabelas usadas como base
São utilizadas as seguintes tabelas como base nesse workflow:
murabei.absenteismo_database__wide2
Tabela com informações sobre as métricas de absenteísmo em centros de custo A, B, C etc de uma determinada unidade de farica X e assim estabelecemos se o absenteísmo nos centros de custo A, B, C etc é maior ou menor, estatisticamente, que o absenteísmo observado na unidade X como um todo; assim podemos estabelecer um alerta caso A (ou B ou C) se desloque em comparação aos seus 'pares' (os outros centros de custo da mesma fábrica).
Artefatos/Tabelas estáticas
São utilizadas as seguintes tabelas estáticas nesse workflow.
soc__depara_cids
Tabela com o de-para dos CIDs para o agrupamento em termos mais genéricos, a tabela possui os seguintes campos:
cid_descricao [str]: Campo com a descrição completa do CID de acordo com o CID-10 disponibilizado no site do SUS.
cid_id [str]: Identificador do CID descrito.
grupo_cid [str]: Capítulo do CID-10.
descrição_grupo [str]: Descrição do capítulo do CID-10.
grupo_modelo [str]: Agrupamento que será utilizado no modelo.
soc__depara_divisao
Tabela com o de-para das divisões presentes no SOC e na base de absenteísmo e um agrupamento que será utilizada para a criação do modelo aberto por grupo_divisao
.
...
Empresa [str]: Chave disponível nos dados do SOC.
...
Unidade [str]: Chave disponível nos dados do SOC.
...
divisao [str]: Chave disponível nos dados de abesenteísmo.
...
divisao_desc [str]: Chave disponível nos dados de abesenteísmo.
...
, horas previstas e hoas extras. Foram utilizados os seguintes campos:
modeling_unit_id [int64]: matrícula do colaborador
hrs_prev [float64]: horas previstas totais para o colaborador no mês de referência
faltas_injust [float64]: faltas injustificadas, em horas, do colaborador no mês de referência
falta_abon [float64]: faltas abonadas, em horas, do colaborador no mês de referência
faltas_just [float64]: faltas justificadas, em horas, do colaborador no mês de referência
faltas_legais [float64]: faltas legais, em horas, do colaborador no mês de referência
atestados [float64]: faltas com atestados, em horas, do colaborador no mês de referência
afastamentos [float64]: faltas com afastamentos, em horas, do colaborador no mês de referência
faltas_sem_afast [float64]: faltas sem afastamentos, em horas, do colaborador no mês de referência
total_horas_extras [float64]: total de horas extras realizadas pelo colaborador
he_folgas [float64]: horas extras trabalhadas em folgas
time [datetime64]: mês de referência
absenteimo_prep.sap__informacoes_cadastrais
Tabela com as principais organizações cadastrais de cada colaborador bem como as informações relevantes de unidades e fábricas de trabalho, será utilizada para a criação da coluna grupo_divisao
posteriormente. Foram usados os seguintes campos:
modeling_unit_id [int64]: matrícula do colaborador
descricao_atividade4 [object]: ramo de atividades
local_fisico [object]: local físico
centro_de_custo [object]: centro de custo
time [datetime64]: mês de referência
Descrição dos passos necessários
Para rodar o modelo são necessários alguns passos de preparação de dados, sucedidos pelo modelo em sí si e um processo para gerar as bases que são utilizadas no PowerBI.
...
Merge entre as tabelasWorkspace/people-analytics-absenteismo/01__tratamento_inicial/absenteismo/01__covariaveis_cadastroMetas_teste_estatístico/df_testes_estatisticos.py
Entrada:
...
murabei.absenteismo_database__wide2
absenteimo_prep.sap__informacoes_cadastrais
Saída:
absenteimo_prep.
...
metas_teste_estatistico__
...
modelo_
...
Nesse notebook são tratadas as bases de cadastro, o objetivo principal é remover a duplicidade dos dados. Esses casos são poucos e parecem ocorrer na transição de posição dos colaboradores em um determinado mês, a exclusão da duplicidade é dada por uma regra simples de considerar a 1a entrada na base como correta.
Fora isso são feitos alguns tratamentos para normalização da base e o calculo do tempo desde o último aumento. Como resultado temos a tabela absenteimo_prep.sap__informacoes_cadastrais
com a seguinte composição:
...
metas
Primeiramente é feito o merge entre as tabelas de entrada, através das chaves time
e modeling_unit_id
coincidentes nas duas. Assim, obtem-se para cada colaborador no mês de referência suas informações de absenteísmo, horas extras bem como as informações de local de trabalho e divisão a qual pertence.
Tratamento e criação de algumas variáveis de interesse
Workspace/people-analytics-absenteismo/01__tratamento_inicial/absenteismo/02__absenteísmoMetas_teste_estatístico/data_prep_testes_estatisticos.py
Entrada:
recursosabsenteimo_humanos.zitrhr145prep.metas_teste_estatistico__modelo_metas
Saída:
absenteimo_prep.sapmetas_teste_absenteismoestatistico__dbprepared
Faz um tratamento simples das variáveis e passa para o tipo date time a coluna de mês/ano que está no formato numérico YYYYMM
. Esse notebook resulta na tabela absenteimo_prep.sap__absenteismo_db
, que apresenta os seguintes campos:
Criação das variáveis de atraso de absenteísmo para verificar recorrência
Workspace/people-analytics-absenteismo/02__modelos/propensao_absenteismo/01__lags_absenteismo.py
Entrada:
absenteimo_prep.sap__absenteismo_db
absenteimo_prep.sap__informacoes_cadastrais
Saída:
absenteimo_prep.propensao_absenteismo__absenteismo_lags
Nesse passo são criadas as variáveis de atraso para fazer os cálculos de recorrência colocando os dados no formato long. Como saída é criada a tabela absenteimo_prep.propensao_absenteismo__absenteismo_lags
com o seguinte formato:
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
Responsável por “desmontar” 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 fatotambém a criação da variável de interesse grupo_divisao
. Consta dos seguintes passos:
Filtro do ramo de atividade 4:
Filtra-se a colunadescricao_atividade4
para trazer apenas os valores:OPERACIONAL
,ADMINISTRATIVO
eTECNICO
Filtro de colaboradores que possuem horas previstas maior que 0:
Filtra-se a colunahrs_prev
para trazer apenas os colaboradores que naquele mês de referência possuem horas previstas maior que 0, evitando-se assim de computar como absenteísta colaboradores que não batem ponto, que estejam de férias (e portanto sem horas previstas) entre outros casos similares.Criação das variáveis de interesse de absenteísmo e horas extras por horas previstas:
faltas_injust-hrs_prev = divisão das colunas
faltas_injust/hrs_prev
falta_abon-hrs_prev = divisão das colunas
falta_abon/hrs_prev
faltas_just-hrs_prev = divisão das colunas
faltas_just/hrs_prev
faltas_legais-hrs_prev = divisão das colunas
faltas_legais/hrs_prev
atestados-hrs_prev = divisão das colunas
atestados/hrs_prev
afastamentos-hrs_prev = divisão das colunas
afastamentos/hrs_prev
faltas_sem_afast-hrs_prev = divisão das colunas
faltas_sem_afast/hrs_prev
total_horas_extras-hrs_prev = divisão das colunas
total_horas_extras/hrs_prev
he_folgas-hrs_prev = divisão das colunas
he_folgas/hrs_prev
Ajuste e tratamento da variável de ‘local físico':
A variável de local físico continha valores que traziam um código numérico seguido do local propriamente dito, como por exemplo0006 - FÁB METAIS SP CML
. Tratou-se dessa variável para retirar o código numérico e o restante fosse transferido para uma coluna nova chamadadivisao
.
Assim, no exemplo0006 - FÁB METAIS SP CML
, o código 0006 era jogado fora e ‘FÁB METAIS SP CML’ era transferido para essa nova coluna 'divisão’.Criação da coluna
grupo_divisao
:
A partir dos valores da colunadivisao
cria-se a hierarquia acima, ogrupo_divisao
. Os valores usados foram:HYDRA ARACAJU → Louças
FÁB LOUÇAS JUNDIAÍ I → Louças
FÁB LOUÇAS RECIFE → Louças
FÁB METAIS SP INDL → Metais
FÁB METAIS JUNDIAÍ → Metais
FÁB AGUDOS → Madeira
FÁB LOUÇAS QUEIMADOS → Louças
FÁB LOUÇAS PARAÍBA → Louças
FÁB ITAPETININGA → Madeira
FÁB UBERABA → Madeira
FÁB METAIS SP CML → Metais
FÁB TAQUARI → Madeira
FL UBERABA → Duraflora
FL AGUDOS → Duraflora
FL ITAPETININGA → Duraflora
FL LENÇÓIS PAULISTA → Duraflora
FL ESTRELA DO SUL → Madeira
FÁB METAIS JACAREÍ → Metais
FÁB LOUÇAS SUL → Louças
FL BOTUCATU → Duraflora
FÁB HYDRA SÃO PAULO → Louças
CD TUBARAO → Outros
HYDRA TUBARÃO → Louças
FÁB LOUÇAS JUNDIAÍ → Louças
FÁB LOUÇAS JUNDIAÍ II → Louças
FÁB BOTUCATU → Madeira
FL PIRATININGA → Madeira
FÁB METAIS SP → Metais
CD RECIFE → Madeira
FL TAQUARI → Duraflora
CD BETIM → Outros
Osgrupos_divisao
resultants foram: Metais, Louças, Duraflora, Madeira e Outros.
Esses tratamentos e a criação dessas novas colunas foram colocados na tabelaabsenteimo_prep.metas_teste_estatistico__prepared
, sendo esta a tabela a ser usada no modelo propriamente dito.
Criação do modelo
O modelo foi criado em três etapas:
Geral -> grupo divisão:
Workspace/people-analytics-absenteismo/02__modelos/metas_teste_estatístico/teste_geral-grupo_divisao.py
Grupo divisão -> divisão:
Workspace/people-analytics-absenteismo/02__modelos/metas_teste_estatístico/teste_grupo_divisao-divisao.py
Divisão -> centro de custo:
Workspace/people-analytics-absenteismo/02__modelos/metas_teste_estatístico/teste_divisao_centro-custo.py
Entrada:
absenteimo_prep.df__stat_test_prepared
Saídas:
absenteimo_prep.df__test__geral_grupo_divisao
absenteimo_prep.df__test__grupo_divisao_divisao
absenteimo_prep.df__test__divisao_centro_custo
Ao final, todas as saídas serão unificadas em uma única tabela a ser usada no dashboard.
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 internas do modelo são:
Seleção de uma janela de 6 meses:
A colunatime
é 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.
Iteração entre os valores da herarquia superior e da hierarquia inferior
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 colunashoras_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 colunashoras_variavel_inferior/horas_esperadas_inferior
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ávelproporcao_sup
. Registra-se como “coroa” o colaborador que tenha faltas abaixo desse limite:heads
→métrica de absenteísmo
>proporcao_sup
tails
→métrica de absenteísmo
<proporcao_sup
métrica de absenteísmo
são as métricasfltas_sem_afast
,faltas_abon
etcA 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çãoheads_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.
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ísmoprobabilidade 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 final 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.