Monday, August 23, 2021

An overview of the three cognitive processes

 

STM, LTM, and working memory. The arrows labeled 1 represent information coming into your brain. The arrows labeled 2 indicate the information that proceeds into your STM. Arrow 3 represents information traveling from the STM into the working memory, where it’s combined with information from the LTM (arrow 4). Working memory is where the information is processed while you think about it.

Sunday, August 15, 2021

Application architecture example with RabbitMQ

 








Messages sent from a sender to a receiver

 


The Single Responsibility Principle

Everyone in software development probably knows the Single Responsibility Principle (SRP) or at least assumes to know it. A common interpretation of this principle is this:

A component should do only one thing, and do it right.

That’s good advice, but not the actual intent of the SRP. “Doing only one thing” is actually the most obvious interpretation of a single responsibility, so it’s no wonder that the SRP is frequently interpreted like this. Let’s just observe that the name of the SRP is misleading. Here’s the actual definition of the SRP:

A component should have only one reason to change.

As we see, “responsibility” should actually be translated to “reason to change” instead of “do only one thing”. Perhaps we should rename the SRP to “Single Reason to Change Principle”. If a component has only one reason to change, it might end up doing only one thing, but the more important part is that it has only this one reason to change.

What does that mean for our architecture?

If a component has only one reason to change, we don’t have to worry about this component at all if we change the software for any other reason, because we know that it will still work as expected. Sadly, it’s very easy for a reason to change to propagate through code via the dependencies of a component to other components.

Figure 1 - Each dependency of a component is a possible reason to change this component, even if it is  only a transitive dependency (dashed arrows).

In the figure above, component A depends on many other components (either directly or transitively) while component E has no dependencies at all. The only reason to change component E is when the functionality of E must change due to some new requirement. Component A, however, possibly might have to change when any of the other components change, because it depends on them.

Many codebases grow harder - and thus more expensive - to change over time because the SRP is violated. Over time, components collect more and more reasons to change. After having collected many reasons to change, changing one component might cause another component to fail.

What’s Wrong With Layers?

Software is an instrument created to help us deal with the complexities of our modern life. Software is just the means to an end, and usually that end is something very practical and real. Software  development is most often applied to automating processes that exist in the real world, or providing solutions to real business problems; The business processes being automated or real world problems that the software is the domain of the software. We must understand from the beginning that software is originated from and deeply related to this domain.

Chances are that you have developed a layered (web) application in the past. You might even be doing it in your current project right now (actually, I am).

Figure 1 - A conventional web application architecture consists of a web layer, a domain layer, and a persistence layer.

Figure 1 shows a high-level view of the very common three-layer architecture. We have a web layer that receives requests and routes them to a service in the domain or “business” layer. The service does some business magic and calls components from the persistence layer to query for or modify the current state of our domain entities.

So, what’s wrong with layers? In my experience a layered architecture has too many open flanks that allow bad habits to creep in and make the software increasingly harder to change over time. In the following sections, I’ll tell you why.

It Promotes Database-Driven Design

By its very definition, the foundation of a conventional layered architecture is the database. The web layer depends on the domain layer which in turn depends on the persistence layer and thus the database.

Figure 2 - Using the database entities in the domain layer leads to strong coupling with the persistence layer.

Usually, we have ORM-managed entities as part of the persistence layer as shown in figure 2. Since layers may access the layers below them, the domain layer is allowed to access those entities. And if it’s allowed to use them, they will be used.

This creates a strong coupling between the persistence layer and the domain layer. Our services use the persistence model as their business model and not only have to deal with the domain logic, but also with eager vs. lazy loading, database transactions, flushing caches and similar housekeeping tasks.

The persistence code is virtually fused into the domain code and thus it’s hard to change one without the other. That’s the opposite of being flexible and keeping options open, which should be the goal of our architecture.

It’s Prone to Shortcuts

In a conventional layered architecture, the only global rule is that from a certain layer, we can only access components in the same layer or a layer below. There may be other rules that a development team has agreed upon and some of them might even be enforced by tooling, but the layered architecture style itself does not impose those rules on us. So, if we need access to a certain component in a layer above ours, we can just push the component down a layer and we’re allowed to access it. Problem solved.

Doing this once may be OK. But doing it once opens the door for doing it a second time. And if someone else was allowed to do it, so am I, right? I’m not saying that as developers, we take such shortcuts lightly. But if there is an option to do something, someone will do it, especially in combination with a looming deadline. And if something has been done before, the threshold for someone to do it again will lower drastically. This is a psychological effect called the “Broken Windows Theory”.

Figure 3 - Since we may access everything in the persistence layer, it tends to grow fat over time.

The persistence layer (or in more generic terms: the bottom-most layer) will grow fat as we push components down through the layers. Perfect candidates for this are helper or utility components since they don’t seem to belong to any specific layer.

So, if we want to disable the “shortcut mode” for our architecture, layers are not the best option, at least not without enforcing some kind of additional architecture rules. And with “enforce” I don’t mean a senior developer doing code reviews but rules that make the build fail when they’re broken.

It Grows Hard to Test

A common evolution within a layered architecture is that layers are being skipped. We access the  persistence layer directly from the web layer, since we’re only manipulating a single field of an entity and for that we need not bother the domain layer, right?

Figure 4 - Skipping the domain layer tends to scatter domain logic across the codebase.

Again, this feels OK the first couple of times, but it has two drawbacks if it happens often (and it will, once someone has done the first step).  First, we’re implementing domain logic in the web layer, even if it’s only manipulating a single field.

What if the use case expands in the future? We’re most likely going to add more domain logic to the web layer, mixing responsibilities and spreading essential domain logic all over the application.  Second, in the tests of our web layer, we not only have to mock away the domain layer, but also
the persistence layer. This adds complexity to the unit test. And a complex test setup is the first step towards no tests at all because we don’t have time for them.

As the web component grows over time, it may accumulate a lot of dependencies to different persistence components, adding to the test’s complexity. At some point, it takes more time for us to understand and mock away the dependencies than to actually write test code.

It Hides the Use Cases

As developers, we like to create new code that implements shiny new use cases. But we usually spend  such more time changing existing code than we do creating new code. This is not only true for those  readed legacy projects in which we’re working on a decades-old codebase but also for a hot new  reenfield project after the initial use cases have been implemented.

Since we’re so often searching for the right place to add or change functionality, our architecture should  help us to quickly navigate the codebase. How is a layered architecture holding up in this regard? 

As already discussed above, in a layered architecture it easily happens that domain logic is scattered  throughout the layers. It may exist in the web layer if we’re skipping the domain logic for an “easy” use case. And it may exist in the persistence layer if we have pushed a certain component down so it can be accessed from both the domain and the persistence layer. This already makes finding the right spot to add new functionality hard.

But there’s more. A layered architecture does not impose rules on the “width” of domain services. Over time, this often leads to very broad services that serve multiple use cases.

Figure 5 - “Broad” services make it hard to find a certain use case within the codebase.

A broad service has many dependencies to the persistence layer and many components in the web layer depend on it. This not only makes the service hard to test, but also makes it hard for us to find the service responsible for the use case we want to work on.

How much easier would it be if we had highly-specialized narrow domain services that each serve a single use case? Instead of searching for the user registration use case in the UserService, we would just open up the RegisterUserService and start working.

It Makes Parallel Work Difficult

Management usually expects us to be done with building the software they sponsor at a certain date. Actually, they even expect us to be done within a certain budget as well, but let’s not complicate things here.

Aside from the fact that I have never seen “done” software in my career as a software developer, to be done by a certain date usually implies that we have to work in parallel.

Probably you know this famous conclusion from “The Mythical Man-Month”, even if you haven’t read the book:

Adding manpower to a late software project makes it later.

they’re working on a very large application where they can split up in sub teams and work on separate parts of the software, it may work, but in most contexts they would stand on each other’s feet.

But at a healthy scale, we can certainly expect to be faster with more people on the project. And management is right to expect that of us. To meet this expectation, our architecture must support  parallel work. This is not easy. And a layered architecture doesn’t really help us here. Imagine we’re adding a new use case to our application. We have three developers available. One can add the needed features to the web layer, one to the domain layer and the third to the persistence layer, right?

Well, it usually doesn’t work that way in a layered architecture. Since everything builds on top of the persistence layer, the persistence layer must be developed first. Then comes the domain layer and finally the web layer. So only one developer can work on the feature at the same time!

Ah, but the developers can define interfaces first, you say, and then each developer can work against these interfaces without having to wait for the actual implementation. Sure, this is possible, but only if we’re not doing Database-Driven Design as discussed above, where our persistence logic is so mixed up with our domain logic that we just cannot work on each aspect separately.

If we have broad services in our codebase, it may even be hard to work on different features in parallel. Working on different use cases will cause the same service to be edited in parallel which leads to merge conflicts and potentially regressions.

Deep Work Highlights

Shallow Work: Non cognitively demanding, logistical-style tasks, often performed while distracted. These efforts tend to not create much new value in the world and are easy to replicate.

Deep Work: Professional activities performed in a state of distraction-free concentration that push your cognitive capabilities to their limit. These efforts create new value, improve your skill, and are hard to replicate.

The Deep Work Hypothesis: The ability to perform deep work is becoming increasingly rare at exactly the same time it is becoming increasingly valuable in our economy. As a consequence, the few who cultivate this skill, and then make it the core of their working life, will thrive.

Two Core Abilities for Thriving in the New Economy

  1. The ability to quickly master hard things.
  2. The ability to produce at an elite level, in terms of both quality and speed.

Busyness as Proxy for Productivity: In the absence of clear indicators of what it means to be productive and valuable in their jobs, many knowledge workers turn back toward an industrial indicator of productivity: doing lots of stuff in a visible manner.

Ironically, jobs are actually easier to enjoy than free time, because like flow activities they have built-in goals, feedback rules, and challenges, all of which encourage one to become involved in one’s work, to concentrate and lose oneself in it. Free time, on the other hand, is unstructured, and requires much greater effort to be shaped into something that can be enjoyed.

Beautiful code is short and concise, so if you were to give that code to another programmer they would say, “oh, that’s well written code.” It’s much like as if you were writing a poem.

Within the overall structure of a project there is always room for individuality and craftsmanship… One hundred years from now, our engineering may seem as archaic as the techniques used by medieval cathedral builders seem to today’s civil engineers, while our craftsmanship will still be honored.

  • Discipline #1: Focus on the Wildly Important
  • Discipline #2: Act on the Lead Measures
  • Discipline #3: Keep a Compelling Scoreboard
  • Discipline #4: Create a Cadence of Accountability
  • Suggestion #1: Be Wary of Distractions and Looping
  • Suggestion #2: Structure Your Deep Thinking


Conic Section


 

Wednesday, August 11, 2021

An eagle egg that hatches in a chicken farm

There’s this story going around the internet about an eagle egg that hatches in a chicken farm. The eagle egg hatches near the chicken eggs. The local hens are so busy doing their thing that they don’t notice the baby eagle egg is not their own.

The eagle chick is born into the world and, having no knowledge of its own eagleness, joins its new family on a nervous and exciting first day of life. Over the next few years the baby eagle lives as chickens live. It eats chicken feed, learns to fly in short choppy hops a few feet at a time, and masters the rapid head jabs of the chicken strut.

One day, while strutting around the chicken farm, the young eagle sees something soaring through the sky. The flying creature has long wings, which it stretches wide before tucking them back in and angling itself downward for a dive towards the earth. The sight of this other-worldly bird stirs something in the young eagle. Over the next few weeks the eagle finds it can’t shake the vision of the soaring eagle from its mind. It tests the

Friday, August 06, 2021

Interpretar as estatísticas e gráficos

 

Valor de p

O valor de p é uma probabilidade que mede a evidência contra a hipótese nula. Um valor de p menor fornece uma evidência mais forte contra a hipótese nula.

Interpretação

Use o valor de p para determinar se os dados não seguem uma distribuição normal.

Para determinar se os dados não seguem uma distribuição normal, compare o valor de p com o nível de significância. Geralmente, um nível de significância (denotado como α ou alfa) de 0,05 funciona bem. Um nível de significância de 0,05 indica um risco de 5% de concluir que os dados não seguem a distribuição normal quando eles realmente a seguem.
Valor de p ≤ α: Os dados não seguem uma distribuição normal (Rejeite H0)
Se o valor de p for menor ou igual ao nível de significância, você deve rejeitar a hipótese nula e concluir que os seus dados não seguem a distribuição normal.
Valor de p > α: Não é possível concluir que os dados não seguem uma distribuição normal (não deve rejeitar H0)
Se o valor de p for maior do que o nível de significância, você não deve rejeitar a hipótese nula. Não há evidências suficientes para concluir que os dados não seguem uma distribuição normal.

Média

A média é a média dos dados, que é a soma de todas as observações divididas pelo número de observações.

Por exemplo, os tempos de espera (em minutos) de cinco clientes em um banco são: 3, 2, 4, 1 e 2. O tempo de espera médio é calculado da seguinte maneira:
Em média, um cliente aguarda 2,4 minutos para ser atendido no banco.

Interpretação

Use a média para descrever a amostra com um único valor que representa o centro dos dados. Diversas análises estatísticas usam a média como uma média padrão do centro da distribuição dos dados.

A mediana e a média medem a tendência central. Mas os valores atípicos, chamados de outliers, podem afetar a mediana menos do que afetam a média. Se seus dados forem simétricos, a média e a mediana são semelhantes.
Simétrica
Não simétrica

Para a distribuição simétrica, a média (linha azul) e a mediana (linha laranja) são tão similares que você não pode ver facilmente as linhas. Mas a distribuição não simétrica é assimétrica à direita.

StDev

O desvio padrão é a medida mais comum de dispersão, ou o quanto os dados estão dispersos sobre a média. O símbolo σ (sigma) é frequentemente usado para representar o desvio padrão de uma população, enquanto s Ã© usado para representar o desvio padrão de uma amostra. A variação que é aleatória ou natural de um processo é frequentemente referida como ruído.

Como o desvio padrão está nas mesmas unidades que os dados, ele é normalmente mais fácil de interpretar do que a variância.

Interpretação

Use o desvio padrão para determinar o grau de dispersão dos dados a partir da média. Um valor de desvio padrão mais alto indica maior dispersão nos dados. Uma boa regra de ouro de uma distribuição normal é que aproximadamente 68% dos valores estão dentro de um desvio padrão da média, 95% dos valores estão dentro de dois desvios padrão e 99,7% dos valores estão dentro de três desvios padrão.

O desvio padrão também pode ser usado para estabelecer um benchmark para estimativa da variação global de um processo.
Hospital 1
Hospital 2
Tempos de alta de hospital

Os administradores controlam o tempo gasto na alta de pacientes tratados nos departamentos de emergência de dois hospitais. Apesar de os tempos médios de alta serem quase os mesmos (35 minutos), os desvios padrão são significativamente diferentes. O desvio padrão do hospital 1 é de cerca de 6. Em média, o tempo de alta de um paciente se desvia da média (linha tracejada) em cerca de 6 minutos. O desvio padrão do hospital 2 é de cerca de 20. Na média, um tempo de alta de um paciente se desvia da média (linha tracejada) em cerca de 20 minutos.

Variância

A variância mede o quanto os dados estão dispersos em relação à sua média. A variância é igual ao desvio padrão ao quadrado.

Interpretação

Quanto maior a variância, maior a dispersão nos dados.

Como a variância (σ2) é uma quantidade quadrada, suas unidades também são quadradas, o que torna a variância difícil de usar, na prática. O desvio padrão é normalmente mais fácil de interpretar porque ele está nas mesmas unidades que os dados. Por exemplo, uma amostra de tempos de espera em uma parada de ônibus pode ter uma média de 9 minutos2. Como a variância não está nas mesmas unidades que os dados, com frequência, ela é exibida com sua raiz quadrada, o desvio padrão. Uma variância de 9 minutos2 Ã© equivalente a um desvio padrão de 3 minutos.

Assimetria

A assimetria é a medida em que os dados não são simétricos.

Interpretação

Use a assimetria para ajudar a estabelecer uma compreensão inicial dos seus dados.
Figura A
Figura B
Distribuições simétricas ou não assimétricas

Conforme os dados tornam-se simétricos, seu valor de assimetria aproxima-se de zero. A Figura A mostra dados de distribuição normal, que por definição exibe assimetria relativamente pequena. Ao traçar uma linha abaixo do meio deste histograma de dados normais é fácil de ver que os dois lados refletem um ao outro. Mas a falta de assimetria simplesmente não significa normalidade. A Figura B mostra uma distribuição onde os dois lados ainda refletem um ao outro, apesar de os dados estarem longe de serem uma distribuição normal.

Distribuições com assimetria positiva ou à direita

Dados com assimetria positiva ou à direita são assim chamados por causa da "cauda" dos pontos de distribuição à direita, e porque seu valor de assimetria será maior do que 0 (ou positiva). Dados salariais são, frequentemente, assimétricos desta maneira: vários funcionários em uma empresa ganham relativamente pouco, enquanto cada vez menos pessoas ganham altos salários.

Distribuições com assimetria negativa ou à esquerda

Assimetria à esquerda ou dados assimétricos negativos são assim chamados porque a "cauda" da distribuição aponta para a esquerda, e porque ela produz um valor de assimetria negativo. Os dados da taxa de falha são frequentemente assimétricos à esquerda. Considere as lâmpadas: muito poucas vão queimar imediatamente, a grande maioria durará por um longo tempo.

Curtose

A curtose indica como as caudas de uma distribuição diferem da distribuição normal.

Interpretação

Use curtose para ajudar você a entender inicialmente as características gerais sobre a distribuição de seus dados.
Linha de base: valor da curtose de 0

Normalmente os dados distribuídos estabelecem a linha de base para a curtose. Um valor de curtose de 0 indica que os dados seguem a distribuição normal perfeitamente. O valor da curtose que se desvia significativamente de 0 pode indicar que os dados não estão normalmente distribuídos.

Curtose positiva

Uma distribuição com um valor de curtose positiva indica que a distribuição tem caudas mais pesadas do que a distribuição normal. Por exemplo, os dados que se seguem à distribuição T têm um valor de curtose positivo. A linha contínua mostra a distribuição normal e a linha pontilhada mostra uma distribuição com um valor de curtose positivo.

Curtose negativa

Uma distribuição com um valor de curtose negativa indica que a distribuição tem caudas mais leves do que a distribuição normal. Por exemplo, os dados que seguem uma distribuição beta com primeiro e segundo parâmetros de forma igual a 2 têm um valor de curtose negativo. A linha contínua mostra a distribuição normal e a linha pontilhada mostra uma distribuição com um valor de curtose negativo.

N

O número de valores não faltantes na amostra.

Neste exemplo, há 141 observações registradas.
Contagem totalNN*
1491418

Mínimo

O mínimo é o menor valor de dados.

Em nesses dados, o mínimo é 7.

1317181912107914

Interpretação

Use o mínimo para identificar um possível outlier ou um erro de entrada de dados. Uma das maneiras mais simples para avaliar a dispersão de seus dados é comparar o mínimo e o máximo. Se o valor mínimo for muito baixo, mesmo quando se considerar o centro, a dispersão e o formato dos dados, investigue a causa do valor extremo.

1o. quartil

Quartis são os três valores — o 1o quartil a 25% (Q1), o segundo quartil a 50% (Q2 ou mediana) e o terceiro quartil a 75% (Q3)— que dividem uma amostra de dados ordenados em quatro partes iguais.

O 1o quartil o 25o percentil e indica que 25% dos dados são menores ou iguais a este valor.

Para estes dados ordenados, o 1o quartil (Q1) é 9,5. Ou seja, 25% dos dados são menores ou iguais a 9,5.

Mediana

A mediana é o ponto médio do conjunto de dados. Este valor do ponto médio é o ponto em que metade das observações estão acima do valor e metade das observações estão abaixo do valor. A mediana é determinada por classificar as observações e encontrar a observação que está no número [N + 1] / 2 na ordem de grandeza. Se o número de observações for ímpar, a mediana é o valor médio das observações que são classificadas com números de N / 2 e [N / 2] + 1.

Para esses dados ordenados, a mediana é 13. Isto é, metade dos valores é menor ou igual a 13, e metade dos valores é maior ou igual a 13. Se você adicionar outra observação igual a 20, a mediana será 13,5, que é a média entre a 5a observação (13) e a 6a observação (14).

Interpretação

A mediana e a média medem a tendência central. Mas os valores atípicos, chamados de outliers, podem afetar a mediana menos do que afetam a média. Se seus dados forem simétricos, a média e a mediana são semelhantes.
Simétrica
Não simétrica

Para a distribuição simétrica, a média (linha azul) e a mediana (linha laranja) são tão similares que você não pode ver facilmente as linhas. Mas a distribuição não simétrica é assimétrica à direita.

3o. quartil

Quartis são os três valores — o 1o quartil a 25% (Q1), o segundo quartil a 50% (Q2 ou mediana) e o terceiro quartil a 75% (Q3)— que dividem uma amostra de dados ordenados em quatro partes iguais.

O terceiro quartil é o 75o percentil e indica que 75% dos dados são menores ou iguais a este valor.

Para estes dados ordenados, o terceiro quartil (Q3) é 17,5. Ou seja, 75% dos dados são menores ou iguais a 17,5.

Máximo

O valor máximo é o maior valor de dados.

Nesses dados, o máximo é 19.

1317181912107914

Interpretação

Use o máximo para identificar um possível outlier ou um erro de entrada de dados. Uma das maneiras mais simples para avaliar a dispersão de seus dados é comparar o mínimo e o máximo. Se o valor máximo for muito elevado, mesmo quando se considerar o centro, a dispersão e o formato dos dados, investigue a causa do valor extremo.

Intervalo de Confiança

O intervalo de confiança fornece um intervalo de valores possíveis para o parâmetro da população. Como as amostras são aleatórias, é improvável que duas amostras de uma população produzam intervalos de confiança idênticos. Porém, se você repetir sua amostra muitas vezes, uma certa porcentagem dos intervalos ou fronteiras de confiança resultantes contém o parâmetro de população desconhecida. A porcentagem destes intervalos de confiança ou fronteiras que contêm o parâmetro é o nível de confiança do intervalo. Por exemplo, um nível de confiança de 95% indica que, se você extrair 100 amostras aleatórias da população, poderia esperar que, aproximadamente, 95 das amostras produza intervalos que contêm o parâmetro da população.

Um limite superior define um valor provável que o parâmetro da população seja menor. Um limite inferior define um valor provável que o parâmetro da população seja maior.

O intervalo de confiança ajuda a avaliar a significância prática de seus resultados. Use seu conhecimento especializado para determinar se o intervalo de confiança inclui valores que tenham significância prática para a sua situação. Se o intervalo for muito amplo para ser útil, pense em aumentar o tamanho da amostra. Para obter mais informações, vá para Como obter um intervalo de confiança mais preciso.

Nesses resultados, os intervalos de confiança indicam que você pode ter 95% de confiança do seguinte:
  • A média da população para as medições de torque está entre 19,710 e 22.819.
  • A mediana da população para as medições de torque está entre 17 e 21,521.
  • O desvio padrão da população para as medições de torque está entre 5,495 e 7,729.

Histograma

Um histograma divide valores de amostra para muitos intervalos e representa a frequência de valores de dados em cada intervalo com uma barra.

Interpretação

Utilize um histograma para avaliar a forma e a dispersão dos dados. Os histogramas são melhores quando o tamanho amostral for superior a 20.

Dados Assimétricos

Você pode usar um histograma dos dados sobrepostos por uma curva normal para analisar a normalidade de seus dados. Uma distribuição normal é simétrica e em forma de sino, como indicada pela curva. Muitas vezes, é difícil de avaliar a normalidade com amostras pequenas. É melhor usar um gráfico de probabilidade para determinar o ajuste de distribuição.

Bom ajuste
Ajuste ruim
Outliers

Outliers, que são valores de dados que estão distantes de outros valores de dados, podem afetar fortemente os resultados de sua análise. Muitas vezes, os outliers são mais fáceis de serem identificados em um boxplot.

Em um histograma, barras isoladas em ambas as extremidades do gráfico identificam possíveis outliers.

Tente identificar a causa de todos os outliers. Corrija todos os erros de entrada de dados ou de medição. Considere a remoção de valores de dados para eventos anormais de ocorrência única (também chamados de causas especiais). Depois, repita a análise. Para obter mais informações, acesse Identificação de outliers.

Dados multimodais

Os dados multimodais têm vários picos, também chamados de modos. Os dados multimodais, muitas vezes, indicam que variáveis importantes ainda não foram contabilizadas.

Simples
Com grupos

Por exemplo, um gerente de um banco coleta os dados de tempo de espera e cria um histograma simples. O histograma parece ter dois picos. Após uma investigação mais aprofundada, o gerente determina que os tempos de espera para os clientes que estão descontando cheques é menor do que os tempos de espera para os clientes que estão se candidatando a empréstimos imobiliários. O gerente acrescenta uma variável de grupo para a tarefa do cliente e, em seguida, cria um histograma com grupos.

Se você tiver informações adicionais que lhe permitam classificar as observações em grupos, pode criar uma variável de grupo com estas informações. Em seguida, pode criar o gráfico com grupos para determinar se a variável de grupo representa os picos nos dados.

Boxplot

Um boxplot fornece um resumo gráfico da distribuição de uma amostra. O boxplot mostra a forma, a tendência central e a variabilidade dos dados.

Interpretação

Utilize um boxplot para examinar a dispersão dos dados e identificar todos os outliers potenciais. Os boxplots são melhores quando o tamanho amostral for superior a 20.

Dados Assimétricos

Examine a dispersão de seus dados para determinar se eles parecem ser assimétricos. Quando os dados são assimétricos, a maioria dos dados está localizada no lado alto ou baixo do gráfico. Muitas vezes, é mais fácil detectar a assimetria com um histograma ou boxplot.

Assimétrico à direita
Assimétrico à esquerda

O boxplot com dados assimétricos à direita mostra os tempos de espera. A maioria dos tempos de espera são relativamente curtos e apenas alguns tempos de espera são longos. O boxplot com dados assimétricos à esquerda mostram dados de tempo de falha. Alguns itens falham imediatamente e muitos outros itens falham posteriormente.

Outliers

Outliers, que são valores de dados que estão distantes de outros valores de dados, podem afetar fortemente os resultados de sua análise. Muitas vezes, os outliers são mais fáceis de serem identificados em um boxplot.

Em um boxplot, asteriscos (*) denotam outliers.

Tente identificar a causa de todos os outliers. Corrija todos os erros de entrada de dados ou de medição. Considere a remoção de valores de dados para eventos anormais de ocorrência única (também chamados de causas especiais).