## Rows: 12,299
## Columns: 17
## $ TaskNumber <chr> "1735", "1742", "1971", "2134", "2251", "22…
## $ Summary <chr> "Flag RI on SCM Message Summary screen usin…
## $ Priority <dbl> 1, 1, 2, 5, 10, 1, 5, 5, 6, 5, 2, 1, 3, 1, …
## $ RaisedByID <chr> "58", "58", "7", "50", "46", "13", "13", "1…
## $ AssignedToID <chr> "58", "42", "58", "42", "13", "13", "13", "…
## $ AuthorisedByID <chr> "6", "6", "6", "6", "6", "58", "6", "6", "6…
## $ StatusCode <chr> "FINISHED", "FINISHED", "FINISHED", "FINISH…
## $ ProjectCode <chr> "PC2", "PC2", "PC2", "PC2", "PC2", "PC9", "…
## $ ProjectBreakdownCode <chr> "PBC42", "PBC21", "PBC75", "PBC42", "PBC21"…
## $ Category <chr> "Development", "Development", "Operational"…
## $ SubCategory <chr> "Enhancement", "Enhancement", "In House Sup…
## $ HoursEstimate <dbl> 14.00, 7.00, 0.70, 0.70, 3.50, 7.00, 7.00, …
## $ HoursActual <dbl> 1.75, 7.00, 0.70, 0.70, 3.50, 7.00, 7.00, 7…
## $ DeveloperID <chr> "58", "42", "58", "42", "13", "13", "43", "…
## $ DeveloperHoursActual <dbl> 1.75, 7.00, 0.70, 0.70, 3.50, 7.00, 7.00, 7…
## $ TaskPerformance <dbl> 12.25, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, …
## $ DeveloperPerformance <dbl> 12.25, 0.00, 0.00, 0.00, 0.00, 0.00, NA, 0.…
estimativas_raw %>%
select(ProjectCode, TaskNumber, HoursEstimate, HoursActual) %>%
skimr::skim()
Name | Piped data |
Number of rows | 12299 |
Number of columns | 4 |
_______________________ | |
Column type frequency: | |
character | 2 |
numeric | 2 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
ProjectCode | 0 | 1 | 3 | 4 | 0 | 20 | 0 |
TaskNumber | 0 | 1 | 4 | 5 | 0 | 10266 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
HoursEstimate | 0 | 1 | 10.15 | 28.84 | 0.01 | 1 | 3 | 7.0 | 910.00 | ▇▁▁▁▁ |
HoursActual | 0 | 1 | 13.18 | 68.72 | 0.01 | 1 | 3 | 8.5 | 2490.16 | ▇▁▁▁▁ |
Temos 20 projetos, com 12299 estimativas_raw. Não há apenas uma estimativa por tarefa, já que há apenas 10266 valores distintos de TaskNumber
.
estimativas_raw %>%
group_by(TaskNumber) %>%
mutate(estimativas = n()) %>%
filter(estimativas > 1) %>%
count(TaskNumber, sort = T)
## # A tibble: 1,384 x 2
## # Groups: TaskNumber [1,384]
## TaskNumber n
## <chr> <int>
## 1 10605 8
## 2 6889 8
## 3 10089 7
## 4 10974 7
## 5 11056 7
## 6 11270 7
## 7 13124 7
## 8 13190 7
## 9 13253 7
## 10 3812 7
## # … with 1,374 more rows
Para nossa análise, usaremos uma estimativa por task. Caso haja mais de uma usaremos a média das estimativas_raw:
estimativas = estimativas_raw %>%
group_by(ProjectCode, TaskNumber, Category, Priority, Summary) %>%
summarise(
HoursEstimate = mean(HoursEstimate),
HoursActual = mean(HoursActual),
DeveloperPerformance = mean(DeveloperPerformance)
) %>%
ungroup()
por_time = estimativas_raw %>%
group_by(ProjectCode) %>%
summarise(devs = NROW(unique(DeveloperID)),
erro_medio_abs = mean(abs(HoursEstimate - HoursActual)),
estimativas = n())
Para responder a perguntar acima, temos que primeiro plotar um gráfico de pontos para assim visualizarmos uma relação entre horas estimadas e horas reais.
estimativas %>%
ggplot(mapping = aes(x = HoursEstimate, y = HoursActual)) +
geom_point(color = "black", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais") +
theme(plot.title = element_text(hjust = 0.5))
Após observar o gráfico acima, não é possível assumir muita coisa. Devido ao fato de que os dados estão estão bem concentrados entre as áreas de 0 e 125, a relação aparentemente não é linear. Para deixar os dados mais visualizáveis, é possível calcular o valor logaritmo de cada variável para assim estender um pouco as escalas.
estimativas %>%
ggplot(mapping = aes(x = log(HoursEstimate), y = log(HoursActual))) +
geom_point(color = "black", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (log)") +
theme(plot.title = element_text(hjust = 0.5))
Levando em conta o gráfico acima, dá para assumir que há uma relação entre as duas variáveis. Apesar do formato do gráfico se aproximar de uma relação linear, não podemos afirmar isso devido ao fato de que as escalas foram modificadas. Para concluirmos mais precisamente as características da relação, nós vamos calcular os seguintes coeficientes de correlação tradicionais:
Pearson A correlação de Pearson mede uma dependência linear entre duas variáveis. Também é conhecido como teste de correlação paramétrica, porque depende da distribuição dos dados.
Kendall A correlação de Kendall é um coeficiente baseado em classificação não paramétrico. Ela é uma medida de correlação de postos, ou seja, verifica a semelhança entre as ordens dos dados quando classificados por cada uma das quantidades.
Spearman Assim como a correlação de Kendall, Spearman também é um coeficiente baseado em classificação não paramétrico. No entanto, o coeficiente avalia com que intensidade a relação entre duas varáveis, analisando essas relações monótonas, sejam elas lineares ou não.
correlacoesTodo <- estimativas %>%
summarise(pearson = cor(HoursEstimate, HoursActual, method = "pearson"),
kendall = cor(HoursEstimate, HoursActual, method = "kendall"),
spearman = cor(HoursEstimate, HoursActual, method = "spearman"))
correlacoesTodo
## # A tibble: 1 x 3
## pearson kendall spearman
## <dbl> <dbl> <dbl>
## 1 0.316 0.696 0.826
Após analisar os resultados acima, vemos que a coeficiente de Pearson deu um valor significativamente distante dos outros coeficientes, isso acontece devido ao fato de que ela não desconsidera outliers e que a relação entre as nossas variáveis não é linear. Por isso, ela não retorna um resultado significativo para a nossa análise. Partindo para os demais coeficientes, vemos que o coeficiente de Kendall é de aproximadamente 0.7, que está entre o intervalo de 0.7 até 0.9, indicando que é uma relação forte. Assim como Kendall, o coeficiente de Spearman tem um valor de 0.83 aproximadamente, indicando também uma relação forte entre Horas Estimadas e Horas Reais. Sendo assim, podemos afirmar que a relação entre as variáveis é forte e positiva, considerando a empresa como um todo.
Nas próximas etapas, iremos dividir em categorias para analisarmos especificamente a relação das Horas Estimadas e Horas Reais em cada categoria.
estimativasManagement <- estimativas %>%
filter(Category == "Management")
estimativasManagement %>%
ggplot(mapping = aes(x = HoursEstimate, y = HoursActual)) +
geom_point(color = "darkblue", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (Management)") +
theme(plot.title = element_text(hjust = 0.5))
estimativasManagement %>%
ggplot(mapping = aes(x = log(HoursEstimate), y = log(HoursActual))) +
geom_point(color = "darkblue", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (log, Mangement)") +
theme(plot.title = element_text(hjust = 0.5))
correlacoesManagement <- estimativasManagement %>%
summarise(pearson = cor(HoursActual, HoursEstimate, method = "pearson"),
kendall = cor(HoursActual, HoursEstimate, method = "kendall"),
spearman = cor(HoursActual, HoursEstimate, method = "spearman"))
correlacoesManagement
## # A tibble: 1 x 3
## pearson kendall spearman
## <dbl> <dbl> <dbl>
## 1 0.456 0.635 0.753
Assim como na análise da empresa como um todo, os dados se concentram na parte inicial, nesse caso no intervalo entre 0 e 50. O gráfico também é similar quando calculamos o logaritmo de cada dado, afirmando uma relação entre as duas variáveis. Partindo para o cálculo dos coeficientes de correlação, vimos acontecer a mesma coisa no coeficiente de Pearson, por isso vamos levar em conta apenas os demais coeficientes. Kendall tem um resultado moderado (0.63), enquanto Spearman tem um resultado forte (0.75), por isso a relação entre as variáveis considerando a categoria de “Mangement” é de moderada para forte.
estimativasDevelopment <- estimativas %>%
filter(Category == "Development")
estimativasDevelopment %>%
ggplot(mapping = aes(x = HoursEstimate, y = HoursActual)) +
geom_point(color = "darkorange", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (Development)") +
theme(plot.title = element_text(hjust = 0.5))
estimativasDevelopment %>%
ggplot(mapping = aes(x = log(HoursEstimate), y = log(HoursActual))) +
geom_point(color = "darkorange", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (log, Development)") +
theme(plot.title = element_text(hjust = 0.5))
correlacoesDevelopment <- estimativasDevelopment %>%
summarise(pearson = cor(HoursEstimate, HoursActual, method = "pearson"),
kendall = cor(HoursEstimate, HoursActual, method = "kendall"),
spearman = cor(HoursEstimate, HoursActual, method = "spearman"))
correlacoesDevelopment
## # A tibble: 1 x 3
## pearson kendall spearman
## <dbl> <dbl> <dbl>
## 1 0.377 0.700 0.835
Em relação aos gráficos, o cenário se repete quanto à categoria de “Management”. Já nos resultados obtidos nos coeficientes diferentemente da categoria anterior, obtemos os coeficientes de Kendall e Spearman (0.7 e 0.83) indicando uma relação forte entre as variáveis, quando considerando a categoria “Development”.
estimativasOperational <- estimativas %>%
filter(Category == "Operational")
estimativasOperational %>%
ggplot(mapping = aes(x = HoursEstimate, y = HoursActual)) +
geom_point(color = "darkgreen", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (Operational)") +
theme(plot.title = element_text(hjust = 0.5))
estimativasOperational %>%
ggplot(mapping = aes(x = log(HoursEstimate), y = log(HoursActual))) +
geom_point(color = "darkgreen", alpha = .3) +
labs(x = "Horas Estimadas", y = "Horas Reais", title = "Relação entre Horas Estimadas e Horas Reais (log, Development)") +
theme(plot.title = element_text(hjust = 0.5))
correlacoesOperational <- estimativasOperational %>%
summarise(pearson = cor(HoursEstimate, HoursActual, method = "pearson"),
kendall = cor(HoursEstimate, HoursActual, method = "kendall"),
spearman = cor(HoursEstimate, HoursActual, method = "spearman"))
correlacoesOperational
## # A tibble: 1 x 3
## pearson kendall spearman
## <dbl> <dbl> <dbl>
## 1 0.159 0.729 0.842
Em relação a categoria “Operational”, o mesmo cenário se repete. No entanto, em relação aos coeficientes, tanto o de Kendall (0.73) quanto o de Spearman (0.84) obteram um resultado maior, indicanto uma relação mais forte entre Horas Estimadas e Horas Reais.
Para respondemos a questão acima, iremos repetir os passos da questão anterior. No entanto, considerando as variáveis de “devs” e “erro_medio_abs”. Desse modo, plotaremos novamente um gráfico de pontos para analisar se há alguma relação entre as variáveis.
por_time %>%
ggplot(aes(x = devs, y = erro_medio_abs, size = estimativas, alpha = .8, color = "darkred")) +
geom_point() +
labs(x = "Número de Desenvolvedores", y = "Erro Média de Estimativas", title = "Relação entre Número de Desenvolvedores e Erro Médio") +
theme(plot.title = element_text(hjust = 0.5))
Levando em conta o gráfico acima, novamente não podemos assumir muita coisa. Apesar de não dar para afirmar se há uma relação ou não entre as variáveis, podemos visualizar que os dados não são lineares. Para obtermos as características da correlação, vamos calcular os mesmos coeficientes da questão anterior.
correlacaoErro <- por_time %>%
summarise(pearson = cor(devs, erro_medio_abs, method = "pearson"),
kendall = cor(devs, erro_medio_abs, method = "kendall"),
spearman = cor(devs, erro_medio_abs, method = "spearman"))
correlacaoErro
## # A tibble: 1 x 3
## pearson kendall spearman
## <dbl> <dbl> <dbl>
## 1 -0.137 0.0324 0.0438
Analisando os coeficientes acima, temos um cenário diferente dos analisandos anteriormente. Dessa vez, todos os coeficientes obteram um resultado abaixo de 0.5, indicando uma relação fraca entre as variáveis. Além disso, o coeficiente de Pearson obteve um resultado negativo, sendo que Kendall (0.03) e Spearman (0.04) obtiveram resultados positivos, mesmo que próximos a 0. Por isso, não podemos afirmar que equipes com mais desenvolvedores produzem estimativas com mais ou menos erros do que equipes menores, levando em conta que as variáveis tem uma relação fraca, indicando que as variáveis aparentemente são independentes.