Você está na página 1de 7

Universidade Federal de Campina Grande UFCG Centro de Engenharia Eltrica e Informtica CEEI Departamento de Sistemas e Computao DSC Disciplina:

na: Mtodos e Software Numrico 2011.1 Professor: Nazareno Andrade Aluno: Digenes Galdino Gondim

Relatrio do Mini-Projeto 2 Interpolao e Regresso

Campina Grande 16 de Maio de 2011

Descrio do Problema
O nosso objetivo investigar como os vdeos mais populares do YouTube se comportam. Para isso, vamos usar um conjunto de dados providos por Figueiredo et al.(http://www.vod.dcc.ufmg.br/traces/youtime/) sobre 3500 dos vdeos mais longos entre os 5000 mais populares do YouTube. A principal pergunta que queremos responder : as caractersticas do vdeo depois de 24h de publicao podem ser usadas para prever a demanda que esse vdeo gerar pelos prximos 15 dias?

Soluo do Problema
O problema foi solucionado seguindo os passos definidos na descrio do projeto. A soluo um problema escrito em Python e que faz o uso das bibliotecas numpy, scipy e pylab. O nome do arquivo mp2.py. Passo 1 Escolhi 5 vdeos aleatoriamente e os coloquei em um arquivo chamado dados5ran.csv. Para atender aos requisitos a. e b., era necessrio interpolar os dados sobre as visualizaes de cada vdeo. Para ler os arquivos .csv, usei uma funo que estava no arquivo site_example.py, enviado no email juntamente com a descrio do projeto. Uma vez lidos, iterava eles e chamava o mtodo plot_total_views, responsvel por plotar na tela a quantidade de views pra cada vdeo, e chamava o mtodo plot_views_per_day, responsvel por plotar a quantidade de visualizaes por dia. Dentro de cada mtodo desses, era feita a interpolao. Para fazer a interpolao, usei o mtodo InterpolatedUnivariateSpline, do pacote scipy.interpolate, passando como parmtro os valores de x como sendo um array com #VIEW_DATA elementos, distribudos uniformemente entre 0 e #DAYS, e os valores de y como sendo os elemtenos do array VIEW_DATA, e o valor de k como sendo 3, para que fosse feita com splines cbicas. Para plotar a curva interpolada, criei um novo array x com 3*#DAYS elementos (multipliquei por 3 para dar suavidade a curva) distribudos uniformemente entre 0 e #DAYS. Os novos valores de y foram obtidos aplicando-se a sada da funo InterpolatedUnivariateSpline, que outra funo, aos valores do novo x. Ento, eu plotava a curva interpolada e os pontos do VIEW_DATA, ambos s para o primeiro ms. Para plotar apenas os valores do primeiro ms, fiz uma regra de trs para identificar quantos pontos do VIEW_DATA eram necessrios para explicar 30 dias.

Para a tarefa 1.b, foi necessrio calcular a taxa de variao a partir dos valores de y j interpolados. Ento, o que fiz foi apenas calcular a diferena entre o dia i do dia i-1 e armazen-los em um novo array, da ento plot-los apenas para os primeiros 30 dias de modo semelhante feito na tarefa 1.a. Segue adiante os grficos obtidos.

Vdeo 1 Total no primeiro ms

Vdeo 1 Taxa diria no primeiro ms

Vdeo 2 Total no primeiro ms

Vdeo 2 Taxa diria no primeiro ms

Vdeo 3 Total no primeiro ms

Vdeo 3 Taxa diria no primeiro ms

Vdeo 4 Total no primeiro ms

Vdeo 4 Taxa diria no primeiro ms

Vdeo 5 Total no primeiro ms

Vdeo 5 Taxa diria no primeiro ms

Alguns interpolantes obtidos tiveram problemas com valores negativos. Como no vdeo 3, onde em alguns pontos a taxa de visualizao diria veio negativa. Talvez isso se deva ao fato de que esse vdeo possui poucos valores (100) para muitos dias de observao (1022). Outro problema, ainda no vdeo 3, que a curva total de visualizaes no ficou suave. E usei splines cbicas. Porm, quando plotado para todos os dias de observao, o vdeo no demonstra sinais de no suavidade. Mas quando damos um zoom para os primeiros 30 dias, percebemos uma drstica perda da suavidade. A seguir est o grfico do vdeo 3 plotado de 0 a 1022 dias:

Apesar de aparentemente conter uma descontinuidade, o grfico acima se mostra suave quando damos um zoom no local. Passo 2 Escolhi aleatoriamente 100 vdeos e os guardei em um arquivo chamado dados100ran.csv.

Passo 3 A tarefa deste passo era calcular os valores das seguintes variveis aps 24h da publicao, para cada um dos 100 vdeos: quantidade de acessos, opinio mdia dos usurios, quantidade de favoritos e quantidade de comentrios. Tambm era necessrio calcular a quantidade de acessos a cada vdeo aps 15 dias de sua publicao. Para realizar esta tarefa, foi necessrio repetir o procedimento do passo anterior s que ao invs de usarmos o valor 30 como parmetro, usamos apenas o valor 1 para as variveis independentes e 15 no caso da varivel dependente. A sada dos valores das variveis impressa na sada padro.

Passo 4 Para fazer o modelo que explica a quantidade de acessos total aps 15 dias usando a quantidade de acessos aps 24h usei regresso linear atravs do mtodo linregress do pacote scipy.stats, passando como parmetro o conjunto de dados para x e y obtidos no passo anterior. X era o conjunto das quantidades aps 24h e y era o conjunto dos valores aps 15 dias. O modelo obtido da forma y = 4.68*x + 168354.53, com R-quadrado = 0.2228 e erro padro = 0.88261. A seguir temos o grfico com a reta de regresso e o conjunto de pontos. O baixo R-quadrado obtido faz sentido devido disperso dos pontos.

Passo 5 O modelo usado para explicar a quantidade de acessos em 15 dias a partir de todas as variveis obtidas no passo 3 foi feito com um mtodo chamado OLS - Ordinary Least Squares. Ele a implementao da regra geral para regresso linear mltipla usando uma matriz de coeficientes para as variveis independentes e um array de coeficientes para a varivel dependente. Como se trata de um grfico de 5 dimenses, no foi possvel desenh-lo. A seguir temos os coeficientes da funo e o R-quadrado const 81060.684600 x1 2.619841 x2 30147.390031 x3 431.925213 x4 8.650079 R-quadrado = 0.369230 Dado que x1=VIEWS, x2=OPINIONS, x3=FAVORITS, x4=COMMENTS Como aumentamos a quantidade de variveis independentes, necessariamente o valor do R-quadrado aumentaria. Eu no aconselharia nenhum dos meus modelos para os desenvolvedores do YouTube pois os valores de R-quadrado so muito baixos e tambm porque os interpolantes assumem valores negativos, pois uso splines cbicas.

REFERNCIAS

[1] numpy.linspace, Return evenly spaced numbers over a specified interval. < http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html>, Acessado em 15/05/2011 [2] scipy.interpolate.InterpolatedUnivariateSpline, One-dimensional interpolating
spline for a given set of data points.

<http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.InterpolatedU nivariateSpline.html>, Acessado em 15/05/2011 [3] scipy. signal.bsplines.cspline1d_eval, Evaluate a spline at the new set of points. dx is the
old sample-spacing while x0 was the old origin.

< http://www.scipy.org/doc/api_docs/SciPy.signal.bsplines.html#cspline1d_eval>, Acessado em 15/05/2011 [4] scipy.stats. linregress, computes a least-squares regression for two sets of measurements < http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.linregress.html>, Acessado em 15/05/2011 [5] OLS - Ordinary Least Squares, <http://www.scipy.org/Cookbook/OLS> Acessado em 15/05/2011

Você também pode gostar