Pablo Zavala · Avaliação de segurança de IA · Engenharia de pesquisa
Manchetes do Reddit e Volatilidade do Dow
Um notebook de trabalho de curso de big data da Carnegie Mellon que pergunta se palavras em manchetes diárias de notícias do Reddit preveem o Dow. Entre 3,183 palavras filtradas, regressões marginais com controle de FDR de Benjamini-Hochberg deixam exatamente uma palavra preditiva de retorno, damn, uma sobrevivente que o notebook interpreta como capacidade preditiva mínima, e não descoberta; a volatilidade mantém 12 palavras e mostra persistência genuína. Adicionar a volatilidade do dia anterior eleva o lasso de zero palavras selecionadas para um R-squared dentro da amostra de 0.262, uma lição compacta sobre testes múltiplos e confundimento.
Entre 3,183 palavras de manchete a 10% de FDR, os retornos mantêm uma sobrevivente (damn, p = 1.0262e-05) contra 12 palavras para a volatilidade; adicionar a volatilidade do dia anterior eleva o lasso de zero palavras selecionadas para R-squared dentro da amostra de 0.262.
Repositório público de notebook
Evidência dentro da amostra de um único notebook executado, em um conjunto de dados que termina em 1 de julho de 2016; os CSVs de origem permanecem fora do repositório público por motivos de licença, então uma reexecução começa a partir do download no Kaggle, mais os arquivos de palavras derivados que o README documenta.
Papel: Trabalho de curso individual: pipeline de texto esparso, triagem marginal com FDR, lasso e double lasso, bootstrap e interpretação.
Cartão de avaliação
Resultado principal
Amostra
Um notebook Jupyter executado: 3,183 palavras filtradas por 1,988 dias de negociação alinhados
Avaliador
P-valores de OLS marginal, FDR de Benjamini-Hochberg em q = 0.1, LassoCV com divisão de série temporal, double lasso, bootstrap
Resultado
Os retornos mantêm uma única sobrevivente de FDR, enquanto a volatilidade mantém 12 palavras; a volatilidade do dia anterior carrega a maior parte do sinal previsível.
Limite
Ajuste dentro da amostra em um único conjunto de dados que termina em 1 de julho de 2016.
Nível de evidência
Amostra
Repositório público com o notebook executado e o README
Avaliador
Saídas de célula salvas e código-fonte da célula, verificáveis sem execução
Resultado
Cada número público remete a uma saída impressa ou ao código-fonte versionado da célula no notebook.
Limite
Os CSVs de origem permanecem externos por motivos de licença; reexecuções exigem o download no Kaggle, além de dois arquivos de palavras fornecidos pelo curso, sem download público.
Afiliação
Amostra
Trabalho de curso da Carnegie Mellon
Avaliador
Linha de autoria do notebook e datas dos arquivos
Resultado
Trabalho de curso de pós-graduação da primavera de 2025; as datas do sistema de arquivos situam o notebook em 26 de fevereiro de 2025 e as exportações de figuras em 29 de março de 2025.
Limite
Apostilas do curso, enunciados e o contexto de avaliação permanecem privados.
Página atualizada
Amostra
Julho de 2026
Avaliador
Registro de conteúdo do site
Resultado
Entrada redigida em 9 de julho de 2026 a partir do notebook original executado.
Limite
Os números refletem as saídas salvas do notebook, e não uma nova reexecução.
Eixos de avaliação com amostra, avaliador, resultado e limite.
Eixo
Amostra
Avaliador
Resultado
Limite
Resultado principal
Um notebook Jupyter executado: 3,183 palavras filtradas por 1,988 dias de negociação alinhados
P-valores de OLS marginal, FDR de Benjamini-Hochberg em q = 0.1, LassoCV com divisão de série temporal, double lasso, bootstrap
Os retornos mantêm uma única sobrevivente de FDR, enquanto a volatilidade mantém 12 palavras; a volatilidade do dia anterior carrega a maior parte do sinal previsível.
Ajuste dentro da amostra em um único conjunto de dados que termina em 1 de julho de 2016.
Nível de evidência
Repositório público com o notebook executado e o README
Saídas de célula salvas e código-fonte da célula, verificáveis sem execução
Cada número público remete a uma saída impressa ou ao código-fonte versionado da célula no notebook.
Os CSVs de origem permanecem externos por motivos de licença; reexecuções exigem o download no Kaggle, além de dois arquivos de palavras fornecidos pelo curso, sem download público.
Afiliação
Trabalho de curso da Carnegie Mellon
Linha de autoria do notebook e datas dos arquivos
Trabalho de curso de pós-graduação da primavera de 2025; as datas do sistema de arquivos situam o notebook em 26 de fevereiro de 2025 e as exportações de figuras em 29 de março de 2025.
Apostilas do curso, enunciados e o contexto de avaliação permanecem privados.
Página atualizada
Julho de 2026
Registro de conteúdo do site
Entrada redigida em 9 de julho de 2026 a partir do notebook original executado.
Os números refletem as saídas salvas do notebook, e não uma nova reexecução.
Como inspecionar este trabalho
Plano contra pico
Dois histogramas carregam o achado central. Os p-valores em nível de palavra para os retornos se espalham de forma uniforme, a assinatura do ruído, enquanto o painel de volatilidade se acumula perto de zero; Benjamini-Hochberg converte esse contraste visual em contagens, uma sobrevivente contra doze.
Números remetem a células versionadas
Todo número citado nesta página aparece em uma saída de célula salva ou no código-fonte versionado da célula do notebook, de modo que um leitor pode verificar cada afirmação abrindo o arquivo antes de executar qualquer coisa.
Verificação do leitor
Abra o notebook versionado e verifique cada número citado em relação às suas saídas salvas e ao código-fonte da célula; essa verificação roda apenas com o arquivo. Uma reexecução completa exige os quatro CSVs de entrada: RedditNews.csv e DJIA.csv chegam pela indicação do Kaggle no README, enquanto WordsFinal.csv e WordFreqFinal.csv, arquivos derivados fornecidos pelo curso que o README descreve, chegam por meio do curso, e não como um download público. Uma ressalva permanece: a execução arquivada rodou algumas células fora de ordem, então uma reexecução limpa constitui o teste justo.
Estudo de caso
Problema
Filtrar milhares de palavras de manchete contra resultados de mercado garante vencedores aparentes só pela sorte, então a análise precisa separar o sinal que sobrevive à disciplina do ruído que escapa pelo portão.
Contexto
O notebook combina 1,989 dias de negociação de preços do DJIA, o mais recente datado de 1 de julho de 2016, com manchetes diárias de notícias mundiais do Reddit, constrói uma matriz esparsa de contagem dia por palavra, e filtra 5,271 palavras candidatas até 3,183.
Método
Regressões OLS marginais pontuam cada palavra duas vezes, contra os retornos diários e contra a volatilidade log high-low; Benjamini-Hochberg em q = 0.1 define o portão de descoberta; o LassoCV com divisão de série temporal cuida da seleção conjunta; um double lasso reestima a persistência da volatilidade contra 1,429 controles de palavras selecionadas; um bootstrap de 30 reamostragens sonda a estabilidade da penalização.
Resultado
Os retornos se comportaram como ruído: 121 das 3,183 palavras ficaram abaixo de p = 0.05, o histograma de p-valor permaneceu plano, e o portão de FDR manteve exatamente uma palavra, damn, em p = 1.0262e-05. A volatilidade manteve 12 palavras, lideradas por tunisia, georgia e terror, mas a volatilidade do dia anterior superou todas elas: o lasso apenas com palavras zerou todo coeficiente, enquanto adicionar o único termo autorregressivo produziu seis coeficientes selecionados, R-squared dentro da amostra de 0.262, e um coeficiente de persistência de 0.442 que o double lasso reduziu para 0.313.
Limite
Tudo permanece dentro da amostra em um único conjunto de dados, a execução arquivada rodou algumas células fora de ordem, segundo as contagens de execução salvas, e o notebook trata o exercício como trabalho de curso de seleção de atributos, e não como um achado negociável.
Evidência
O repositório público disponibiliza o notebook executado, cujas saídas salvas e código-fonte de célula contêm todo número citado, além de um README apontando para os dados de origem do Kaggle, que permanecem externos por motivos de licença.
Resultados principais
Exatamente 1 de 3,183 palavras sobreviveu a um FDR de 10% para os retornos: damn, em p = 1.0262e-05, interpretada como capacidade preditiva mínima, e não descoberta
12 palavras sobreviveram ao mesmo portão para a volatilidade em um corte de p = 0.00035710, lideradas por tunisia, georgia e terror
O lasso apenas com palavras zerou todo coeficiente para ambos os alvos; a volatilidade do dia anterior elevou o R-squared dentro da amostra de 0.0 para 0.262, com seis coeficientes selecionados
O double lasso reduziu a persistência da volatilidade de um ingênuo 0.647 para 0.313 (erro padrão 0.0355) contra 1,429 controles de palavras
Um bootstrap de 30 reamostragens fixou a penalização do lasso no piso de grade de 0.0001 com dispersão zero, um resultado metodológico de cautela