Este repositório apresenta uma análise detalhada dos dados contidos no arquivo startup_data.csv
.
- Introdução
- Instalação
- Descrição dos Dados
- Pré-processamento de Dados
- Análise Exploratória de Dados
- Modelagem Preditiva
- Conclusão
- Referências
O objetivo deste projeto é explorar e identificar padrões nos dados de startups, analisando aspectos como tipos de investimento, localização geográfica, categorias de negócio e tendências temporais.
Para isso, foram utilizadas bibliotecas como Pandas para manipulação e tratamento dos dados, Seaborn e Matplotlib para visualização gráfica, e Scikit-learn para modelagem preditiva.
Para executar este projeto localmente, siga as instruções abaixo:
-
Clone o repositório:
git clone https://github.com/giovannibragasv/ps-lapes.git
-
Acesse o diretório do projeto:
cd ps-lapes
-
Execute o notebook ou o script Python:
jupyter notebook ps-lapes.ipynb
O conjunto de dados startup_data.csv
reúne informações detalhadas sobre diversas startups, incluindo:
-
Informações Gerais:
name
: Nome da startup.category_code
: Categoria de atuação.city
,state_code
: Localização geográfica.
-
Datas Importantes:
founded_at
: Data de fundação.closed_at
: Data de fechamento ou aquisição.
-
Investimentos:
funding_total_usd
: Total de financiamento recebido.has_angel
,has_VC
: Indicadores de tipos de investimento recebidos.has_roundA
,has_roundB
,has_roundC
,has_roundD
: Indicação de participação em diferentes rounds de investimento.
-
Outros Atributos:
status
: Status atual da startup (acquired
ouclosed
).avg_participants
: Média de participantes nos investimentos.is_top500
: Indica se a startup está entre as top 500.
O pré-processamento de dados é uma etapa crucial para garantir a qualidade da análise. As seguintes ações foram realizadas:
-
Carregamento dos Dados:
Importação do conjunto de dados utilizando o Pandas:
import pandas as pd df = pd.read_csv('startup_data.csv')
-
Renomeação de Colunas:
Renomeação da coluna
Unnamed: 6
paraaddress
para melhor compreensão:df = df.rename(columns={'Unnamed: 6': 'address'})
-
Tratamento de Valores Nulos:
-
Status:
Conversão dos status
acquired
eclosed
paraadquirido
efechado
, respectivamente:df['status'] = df['status'].replace({'acquired': 'adquirido', 'closed': 'fechado'})
-
Financiamento Total:
Conversão da coluna
funding_total_usd
para numérico, substituindo valores inválidos pela mediana:df['funding_total_usd'] = pd.to_numeric(df['funding_total_usd'], errors='coerce') df['funding_total_usd'] = df['funding_total_usd'].fillna(df['funding_total_usd'].median())
-
Datas:
Conversão da coluna
founded_at
para datetime, substituindo valores nulos pela mediana:df['founded_at'] = pd.to_datetime(df['founded_at'], errors='coerce') median_date = df['founded_at'].median() df['founded_at'] = df['founded_at'].fillna(median_date) df['founded_year'] = df['founded_at'].dt.year
-
-
Criação de Novas Colunas:
Criação da coluna
maior_investimento
para identificar o nível mais alto de investimento recebido:def maior_investimento(row): if row['has_roundD'] == 1: return 'Round D' elif row['has_roundC'] == 1: return 'Round C' elif row['has_roundB'] == 1: return 'Round B' elif row['has_roundA'] == 1: return 'Round A' elif row['has_VC'] == 1: return 'VC' elif row['has_angel'] == 1: return 'Anjo' else: return 'Sem Investimento' df['maior_investimento'] = df.apply(maior_investimento, axis=1)
A análise exploratória permite compreender melhor os dados e identificar padrões significativos.
Contagem do número de startups adquiridas e fechadas:
count_status = df['status'].value_counts()
-
Resultado:
- Adquiridas: 597
- Fechadas: 326
Análise da relação entre o status das startups e os tipos de investimento recebidos:
colunas_investimento = ['has_angel', 'has_VC', 'has_roundA', 'has_roundB', 'has_roundC', 'has_roundD']
status_investimento = df.groupby('status')[colunas_investimento].sum().reset_index()
Visualização dos dados:
import seaborn as sns
import matplotlib.pyplot as plt
status_investimento_melted = status_investimento.melt(id_vars='status', var_name='Tipo de Investimento', value_name='Quantidade')
plt.figure(figsize=(12, 8))
sns.barplot(data=status_investimento_melted, x='Quantidade', y='status', hue='Tipo de Investimento', palette='viridis')
plt.xlabel('Quantidade de Startups')
plt.ylabel('Status')
plt.title('Quantidade de Startups por Status e Tipo de Investimento')
plt.legend(title='Tipo de Investimento', loc='upper right')
plt.tight_layout()
plt.show()
Interpretação:
- Startups com rounds de investimento mais avançados (Rounds C e D) tendem a ser adquiridas.
- A maioria das startups fechadas não passou dos investimentos iniciais.
Análise das cidades com maior número de startups e o status em cada uma delas:
top_cidades = df['city'].value_counts().nlargest(10).index
ordem_cidades = df[df['city'].isin(top_cidades)]['city'].value_counts().loc[top_cidades].index
Visualização:
plt.figure(figsize=(12, 6))
sns.countplot(x='city', hue='status', data=df[df['city'].isin(top_cidades)], order=ordem_cidades, palette='viridis')
plt.title("Status de Startups por Cidade")
plt.ylabel('Número de Startups')
plt.xlabel('Cidades')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
Interpretação:
- São Francisco lidera em número de startups adquiridas, seguido por Nova Iorque e Mountain View.
- A região do Vale do Silício apresenta uma significativa concentração de aquisições.
Exame das categorias de startups e sua correlação com o sucesso:
colunas_tipo = [
'is_software', 'is_web', 'is_mobile', 'is_enterprise',
'is_advertising', 'is_gamesvideo', 'is_ecommerce',
'is_biotech', 'is_consulting', 'is_othercategory'
]
count_tipo = df[colunas_tipo].sum().reset_index()
count_tipo.columns = ['Tipo', 'Contagem']
Visualização:
plt.figure(figsize=(10, 6))
sns.barplot(data=count_tipo, x='Tipo', y='Contagem', palette='viridis')
plt.title('Distribuição de Tipos de Startups')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
Interpretação:
- Software e Web são as categorias com maior quantidade de startups adquiridas.
Investigação de como o número de startups adquiridas varia ao longo dos anos:
df['acquired'] = df['status'] == 'adquirido'
acquired_counts = df.groupby('founded_year')['acquired'].sum().reset_index()
Visualização:
plt.figure(figsize=(10, 6))
sns.lineplot(data=acquired_counts, x='founded_year', y='acquired', marker='o', color='green')
plt.xlabel('Ano de Fundação')
plt.ylabel('Número de Startups Adquiridas')
plt.title('Startups Adquiridas por Ano de Fundação')
plt.tight_layout()
plt.show()
Interpretação:
- Startups fundadas no final dos anos 2000 foram mais adquiridas, possivelmente devido a evoluções tecnológicas significativas.
Análise do financiamento médio recebido por startups em diferentes categorias:
avg_funding_by_category = df.groupby('category_code')['funding_total_usd'].mean().reset_index()
Visualização:
plt.figure(figsize=(12, 6))
sns.barplot(data=avg_funding_by_category, x='category_code', y='funding_total_usd', palette='viridis')
plt.xlabel('Categoria')
plt.ylabel('Financiamento Médio (USD)')
plt.title('Financiamento Médio por Categoria')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()
Interpretação:
- Categorias como mobile e transportation tendem a receber maiores financiamentos médios.
- Setores mais tecnológicos podem exigir investimentos iniciais mais elevados.
Foi construído um modelo de Random Forest para prever o status das startups com base em características selecionadas.
Foram selecionadas features relevantes que podem influenciar o status da startup:
features = [
'has_VC', 'has_angel', 'has_roundA', 'has_roundB',
'has_roundC', 'has_roundD', 'avg_participants', 'is_top500'
]
Divisão dos dados em conjuntos de treinamento e teste:
from sklearn.model_selection import train_test_split
X = df[features]
y = df['status'].map({'adquirido': 1, 'fechado': 0})
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Treinamento do modelo de Random Forest:
from sklearn.ensemble import RandomForestClassifier
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_train, y_train)
Avaliação do desempenho do modelo no conjunto de teste:
from sklearn.metrics import classification_report
y_pred = modelo.predict(X_test)
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.53 0.50 0.52 100
1 0.73 0.75 0.74 177
accuracy 0.66 277
macro avg 0.63 0.63 0.63 277
weighted avg 0.66 0.66 0.66 277
- Classe 0: Representa startups "fechadas".
- Classe 1: Representa startups "adquiridas".
-
Precisão (Precision)
- Definição: Proporção de previsões positivas corretas.
- Interpretação: De todas as startups que o modelo previu como pertencentes a uma determinada classe, quantas estavam corretas?
-
Revocação (Recall)
- Definição: Proporção de verdadeiros positivos identificados corretamente.
- Interpretação: De todas as startups que realmente pertencem a uma classe, quantas o modelo conseguiu prever corretamente?
-
F1-Score
- Definição: Média harmônica entre precisão e revocação.
- Interpretação: Equilíbrio entre precisão e revocação. Um F1-score mais alto indica melhor desempenho do modelo.
-
Suporte (Support)
- Definição: Número de ocorrências reais de cada classe no conjunto de teste.
- Interpretação: Quantidade de amostras de cada classe no conjunto de teste.
-
Classe 0 ("fechadas")
- Precisão: 53%
- Revocação: 50%
- F1-Score: 52%
- Interpretação: O modelo tem desempenho moderado na previsão de startups que fecharam.
-
Classe 1 ("adquiridas")
- Precisão: 73%
- Revocação: 75%
- F1-Score: 74%
- Interpretação: O modelo apresenta bom desempenho na previsão de startups adquiridas.
Análise da importância de cada feature no modelo:
importances = modelo.feature_importances_
feature_importance_df = pd.DataFrame({
'Feature': features,
'Importance': importances
}).sort_values(by='Importance', ascending=False)
Visualização:
plt.figure(figsize=(10, 6))
sns.barplot(data=feature_importance_df, x='Importance', y='Feature', palette='viridis')
plt.title('Importância das Features no Modelo')
plt.xlabel('Importância')
plt.ylabel('Feature')
plt.tight_layout()
plt.show()
Interpretação Geral:
avg_participants
é a feature mais importante, indicando que o número médio de participantes nos investimentos é um forte indicador do status da startup.- Features relacionadas a estágios iniciais de financiamento (como
has_roundA
ehas_roundB
) têm mais importância do que as rodadas posteriores. - Estar entre as top 500 empresas (
is_top500
) também é um indicador significativo de sucesso ou aquisição.
Através desta análise detalhada dos dados de startups, foi possível extrair insights significativos sobre os fatores que influenciam o sucesso ou o fechamento de uma startup. Alguns dos principais pontos observados incluem:
-
A Importância dos Investimentos:
- Startups que progridem para rounds de investimento mais avançados (Rounds B, C e D) apresentam uma probabilidade significativamente maior de serem adquiridas, indicando que o acesso a capital em estágios posteriores é crucial para o crescimento e sustentabilidade a longo prazo.
- A obtenção de investimentos iniciais, como de investidores anjo e venture capital, é fundamental para o desenvolvimento inicial, mas não garante necessariamente o sucesso futuro sem progressão para rounds subsequentes.
-
Influência da Localização Geográfica:
- Ecossistemas tecnológicos robustos, especialmente em cidades como São Francisco e Nova Iorque, oferecem vantagens competitivas significativas para startups, incluindo acesso a capital, talentos qualificados e redes de networking.
- A concentração de startups bem-sucedidas em certas regiões, como o Vale do Silício, reforça a importância do ambiente empreendedor e do suporte local no sucesso empresarial.
-
Setores de Atuação e Sucesso:
- Embora setores como mobile e transporte sejam populares e recebam atenção significativa, a categoria de atuação por si só não é um indicador definitivo de sucesso ou aquisição.
-
Tendências Temporais e Impacto Econômico:
- A análise temporal revelou que startups fundadas em determinados períodos, especialmente no final dos anos 2000, tiveram maiores taxas de aquisição, possivelmente devido a avanços tecnológicos significativos ou condições econômicas favoráveis.
- Eventos macroeconômicos e tendências de mercado têm impacto direto no ecossistema de startups, influenciando oportunidades de investimento e crescimento.
-
Eficácia da Modelagem Preditiva:
- O modelo de Random Forest desenvolvido demonstrou desempenho satisfatório na previsão do status das startups, destacando-se a importância da média de participantes nos investimentos e a posição no ranking top 500 como features mais influentes.
- A compreensão das variáveis-chave que contribuem para o sucesso permite que empreendedores e investidores tomem decisões mais informadas, otimizando estratégias de crescimento e investimento.
Em suma, o sucesso de uma startup é multifatorial, envolvendo uma combinação de acesso a capital, localização estratégica, setor de atuação e timing em relação às condições de mercado. Esta análise enfatiza a necessidade de uma abordagem holística ao avaliar o potencial de sucesso de novas empresas, considerando não apenas fatores internos, mas também o contexto externo em que estão inseridas.