1
resposta

Esta parte não ficou bem explicada.

Nesta parte do módulo, há conceitos não explicados.


"Para fazermos essa distribuição, criaremos três variáveis. A primeira delas é total_matriculas, que será inicializada como um array vazio. Em seguida, criaremos uma variável x que receberá a chamada de np.random.rand(20), uma maneira de calcularmos randomicamente os 20 cursos que temos no dataframe. Por fim, teremos uma variável prob (de probabilidade) que receberá a divisão de x por sum(x) (a soma de x).

todas_matriculas = [] x = np.random.rand(20) prob = x / sum(x)"


Quero adiantar, a título de antecipação, que já olhei todo o histórico do Fórum, neste módulo aqui. Percebi que várias pessoas tiveram a mesma dúvida, e apontaram a falta de explicações suficientes no vídeo. Também li todas as respostas aos tópicos, incusive a de um rapaz que pede que seja explicado como se fosse para uma criança. Mesmo assim, continuei sem entender. Então vou precisar de uma explicação mais detalhada, com exemplos.

Tudo bem, entendi a linha: todas_matriculas = [] No entanto, nas variáveis seguintes, voei. Então eu executei passo a passo pra ver se fazia sentido. O np.random.rand eu sabia o que faz. Retorna uma lista de 20 números entre 0 e 1.

x = np.random.rand(20)

array([0.57134844, 0.88137217, 0.38360506, 0.09179092, 0.94089174, 0.64386469, 0.71917051, 0.63825275, 0.22069572, 0.54751514, 0.38125112, 0.58614196, 0.55084518, 0.89566256, 0.37223224, 0.75574899, 0.36789709, 0.13191856, 0.66759442, 0.34187834])

E quando eu fiz:

prob = x / sum(x) prob

O resultado foi este:

array([0.05344861, 0.08245077, 0.03588556, 0.00858687, 0.08801872, 0.06023238, 0.0672771 , 0.05970739, 0.02064569, 0.05121905, 0.03566535, 0.05483252, 0.05153057, 0.08378761, 0.03482165, 0.07069895, 0.03441611, 0.01234074, 0.06245225, 0.0319821 ])

Busquei a sintaxe de sum() e sua função:

sum (iterable, start)iterable: iterable pode ser qualquer lista, tuplas ou dicionários, mas o mais importante, devem ser números. início : este início é adicionado à soma de números no iterável. Se start não for fornecido na sintaxe, será considerado 0.

Em nosso exemplo, start é 0, então (x / sum(x)) é uma lista, onde os itens da lista são divididos pela soma dos itens da lista, que é igual a 10,6896776634. Mas não sei qual o sentido disso? Pra que dividir cada item da lista pela soma dos itens?

Esta parte do vídeo ficou meio "jogada", sem explicar o motivo de estar criando estas variáveis x e prob. Por gentileza, explicar porque usar o comando np.random.rand(20), gerando a lista de números entre 0 e 1? Por gentileza, explicar para que serve a fórmula "prob = x/sum(x)", e porque foi utilizada aqui? Tem fundamentos de estatística que eu deva saber antes de estudar esse módulo? Muito obrigada pela paciência.

1 resposta

Oi, Lyse! Tudo bem com você? Espero que sim!

Desculpa a demora para te trazer um retorno.

O objetivo final dessa transformação é fazer com que os valores entre 0 e 1 gerados em x = np.random.rand(20) possam se tornar valores passíveis a serem considerados pesos probabilísticos, ou seja, que a soma de todos os valores resulte em 1 (ou 100%).

É percebível que o professor depois utilizou da variável prob no comando np.random.choice(cursos.index, p = prob). Então, para explicar melhor o que aconteceu, ao olharmos a biblioteca do numpy, numpy.random.choice, vemos que o parâmetro p será a variável de probabilidades de cada elemento do parâmetro a (lista a ter um elemento escolhido). Isso quer dizer que cada parte da porcentagem de p será correspondente a um elemento de a, e isso servirá como peso na escolha aleatória no método random.choice.

Pois bem, ao termos valores de probabilidade para um caso aleatório acontecer, esses valores devem ter sua soma igual a 100%, exemplos:

  • Ao lançar uma moeda não viciada para o alto, temos a probabilidade de 50% para cair em cara e 50% para cair em coroa, somando os dois casos, temos 100%.
  • Ao jogarmos um dado de 6 lados não viciado temos cerca de 16,67% para cada um dos lados cair para cima, somando os 6 casos temos 100% também.

E como você destacou, a soma dos valores x é dada por 10,6896776634 esse valor nos mostra que os valores aleatórios entre 0 e 1 não podem ser considerados probabilísticos, pois sua soma resulta em um valor bem maior que 1, ou 100%. Para que os valores pudessem estar inseridos em dados probabilísticos e que sua soma resultasse em 1, foi feita a conversão de valores dividindo-os pela sua soma, funciona quase como uma normalização dos dados, mantendo o seu peso em outra escala.

A origem da equação de prob (prob = x / sum(x)) é uma regra de três entre os valores que temos de x e os valores esperados de prob, exemplo da regra com o primeiro elemento de x:

Alt text: Disposição de valores em regra de três entre 10,6896776634 e 1 com 0.57134844 e y, abaixo da disposição há o desenvolvimento do cálculo de forma que y é igual a 0.57134844 vezes 1 divididos por 10,6896776634 com o resultado mostrado igual a 0.05344861

Para verificar que funcionou você pode imprimir o valor da soma de prob com:

print(sum(prob))

O valor retornado não será exatamente 1, mas um valor muito próximo.

Eu espero que tenha ficado mais bem explicado ^^

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!