Мотивация

Kickstarter, ведущая платформа для краудфандинга, уже много лет успешно работает для обслуживания инновационных бизнес-идей и амбициозных предпринимателей. На Kickstarter перечислено более сорока тысяч проектов, требующих внимания общественности, а также финансирования. Из 483 942 перечисленных проектов только 37,67% из них были успешно профинансированы, что указывает на потребность в продуктах, которые могут значительно повысить вероятность успеха краудфандинговых проектов. Следовательно, основная цель этого проекта - разработать инструмент на основе НЛП, который может точно и эффективно оценивать идеи людей и давать информативные отзывы по аспектам потенциального успеха и общей конкурентоспособности.

Цель проекта

Инструмент проверки концепции краудфандинга будет построен в качестве нашего конечного продукта. В частности, пользователь предоставит описание своей идеи вместе с целевой суммой краудфандинга, периодом времени и категорией проекта. Система извлечет необходимые функции из введенного текста, а затем вернет вероятность успеха для предложенного проекта. Кроме того, проекты с похожими идеями, которые недавно были запущены на Kickstarter, будут представлены и сравнены в качестве дополнительной ссылки.

Описания данных

Основным источником данных, который мы использовали для этого проекта, является 400 000 наборов данных Kickstarter Projects от Kaggle . Из-за большого объема данных мы случайным образом отобрали 10 058 проектов из проектов Kickstarter 2018–2019 гг. Обзор этого случайно отобранного набора данных был следующим:

В наборе данных binary_state (либо «успешно», либо «не удалось») было меткой целевого прогноза, в то время как остальные переменные описывали различные характеристики проектов Kickstarter, которые рассматриваются как потенциальные кандидаты особенности моделирования. Однако единственной текстовой информацией в наборе данных было «рекламное объявление» (краткое описание проекта длиной не более 135 символов), которого могло быть недостаточно для моделирования. Поэтому мы взяли полную историю соответствующего проекта с веб-сайта Kickstarter с помощью пакета selenium и объединили их в набор данных.

Методология

С подготовленным набором данных наш подход к созданию валидатора идей краудфандингового проекта включал 4 основных шага, а именно:

  • Создание и выбор функций
  • Построение модели и интерпретация
  • Разработка алгоритма оценки схожести
  • Реализация модели и построение пользовательского интерфейса

Создание и выбор функций

В основном мы сосредоточились на двух типах функций для моделирования результатов проекта - настраиваемых функциях и функциях встраивания слов. Что касается настраиваемых функций, их можно разделить на три категории следующим образом:

Эти три категории настраиваемых функций предназначены для отражения различных аспектов данного проекта Kickstarter. Общая информация охватывала основную ключевую информацию о проекте. Лексическое богатство отражало, насколько богат словарный запас описания данного проекта (сочетающего аннотацию и рассказ). Его можно измерить по лексическому разнообразию с использованием соотношения токенов типа (TTR) в пакете Lexical Diversity или лексической энтропии с помощью следующей самоопределяемой функции:

def lex_entropy(text, base = 2.0):
    dct = dict.fromkeys(list(text))
    pkvec = [float(text.count(c)) / len(text) for c in dct]
    H = -sum([pk * math.log(pk) / math.log(base) for pk in pkvec])
    return H

Лексическая читаемость отражала, насколько легко тексты могли быть поняты читателями, и мы использовали пакет TextStat для вычисления некоторых статистических данных, чтобы определить удобочитаемость, сложность и уровень оценки конкретного корпуса.

Чтобы лучше понять эти настраиваемые функции и общие тексты в успешных и неудачных проектах, мы сначала провели исследовательский анализ данных (EDA), чтобы получить некоторые идеи, прежде чем строить модели:

Во-первых, мы сравнили общие слова в успешных и неудачных проектах, используя графики облака слов. Мы заметили, что «игровые» темы очень распространены для успешных проектов. Кроме того, у успешных проектов, как правило, была «расширенная цель», которая была дополнительной целью, установленной для кампании в случае, если сумма финансирования превысила первоначальную цель финансирования. Это говорит о том, что четкий долгосрочный план важен для успеха проекта.

На приведенном выше рисунке показана частота успешных и неудачных попыток для каждой категории и отсортирована по степени успешности. И игры, и технологии были популярными категориями, однако игровые проекты получить финансирование было намного проще, чем технологические проекты.

Затем было исследовано лексическое разнообразие, измеряющее разнообразие слов, используемых в описаниях проектов, чтобы отразить лексическое богатство. Мы заметили, что в категориях музыки и театра используется самый широкий словарный запас, и этот результат совпал с нашим ожиданием, что существует множество слов для объяснения и описания художественных особенностей этих двух категорий.

На приведенном выше рисунке показана лексическая читаемость каждой категории с использованием оценки легкости чтения Флеша. Чем выше оценка, тем легче понимается текст. Здесь мы заметили, что категории комиксов и искусства читать легче всего, а категории танцев и технологий - труднее всего.

В дополнение к настраиваемым функциям, функции встраивания слов также были важны для представления текстовой информации путем захвата контекста слов, а также отношений слов. В этом проекте мы использовали два разных метода встраивания слов: скрытый семантический анализ (LSA) и Doc2Vec.

LSA токенизирует слова в документе с помощью Tf-Idf Vectorization и сжимает эти векторные функции во вложения с разложением по сингулярным значениям (SVD). На практике одна из проблем заключалась в том, как определить оптимальное количество компонентов на этапе уменьшения размерности. Чтобы решить эту проблему, мы проверили разное количество компонентов и изучили скорость изменения объясненной дисперсии (то есть предельного выигрыша при заданном количестве компонентов). Затем был использован график изгиба для определения оптимального количества компонентов, которое составило 500:

n_comp = [250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500]
explained = []
for x in n_comp:
   svd = TruncatedSVD(n_components=x, random_state=123)
   svd.fit(tfidf_matrix)
   explained.append(svd.explained_variance_ratio_.sum())
   print("Number of components = %r and explained variance = %r"%(x,svd.explained_variance_ratio_.sum()))
lst = [0] + explained
change_rate = []
for i in range(0,len(lst)):
   if i > 0:
      rate = (lst[i]-lst[i-1])/250
      change_rate.append(rate)
plt.plot(n_comp, change_rate)
plt.xlabel('Number of components')
plt.ylabel("Gain")
plt.title("Plot of Number of components v/s gain")
plt.show()

Doc2Vec, с другой стороны, представляет собой основанный на нейронной сети подход к изучению встраиваний из заданного текстового документа. Он использует две модели, в том числе версию Paragraph Vector с распределенной памятью (PV-DM), которая предсказывает следующее слово, используя слова и идентификатор документа, и версию Paragraph Vector с распределенным набором слов (PV -DBOW), который предсказывает окружающие слова, используя идентификатор документа. В этом проекте мы использовали все истории проекта в наборе данных для обучения модели Doc2Vec, которая сгенерировала 100 функций внедрения Doc2Vec.

Эти функции встраивания слов были важным дополнением к настраиваемым функциям при построении модели. Однако эти функции имеют более низкую интерпретируемость, чем настраиваемые функции при моделировании. Поэтому мы решили сначала построить модель и интерпретировать результаты моделирования, используя только настроенные функции, а затем добавить функции встраивания, чтобы проверить улучшение производительности модели. Кроме того, эти функции встраивания слов также будут использоваться при вычислении оценки схожести, которая использовалась для идентификации похожих проектов в наборе данных на основе ввода пользователями своих исходных идей.

Построение и интерпретация модели

Чтобы гарантировать интерпретируемость модели, мы сначала построили модель, используя только настроенные функции. На этапе предварительной обработки данных мы преобразовали информацию о стране / местоположении в двоичную переменную top_ten, где top_ten = 1 относится к 10 странам / местоположениям с наибольшим количеством проектов Kickstarter ( в противном случае top_ten = 0). Затем категории проекта были преобразованы в бинарные фиктивные переменные с уровнями (k-1). Затем метка binary_state была закодирована в 1 для «успешно» и 0 для «неудачно». Наконец, весь набор данных был разделен на наборы данных для обучения (67%) и тестирования (33%). Окончательный набор данных после предварительной обработки был показан следующим образом:

Мы построили несколько различных моделей, включая логистическую регрессию, случайный лес, Light GBM и XGBoosting, с гиперпараметрами, настроенными с помощью поиска по сетке. Мы обнаружили, что модель XGBoosting показала наилучшую производительность с показателем f1 0,83 и показателем отзыва 0,94. Примечательно, что оценка отзыва в этом контексте была очень важна, поскольку более высокая оценка отзыва (меньше ложноотрицательных случаев) указывала на меньшую вероятность упущенной возможности. Параметры и результаты настроенной модели XGBoosting были показаны следующим образом:

clf_xgb = XGBClassifier(booster='gbtree', nthread = -1,
                        learning_rate =0.08,n_estimators=308,
                        max_depth=3,min_child_weight=7,
                        gamma=0,subsample=0.7,colsample_bytree=0.7,
                        objective= 'binary:logistic',
                        reg_alpha = 1e-05, 
                        reg_lambda=1e-05,
                        scale_pos_weight=2,seed=27)
model_result(clf_xgb, X_train, X_test, y_train, y_test, print_matrix = True)

Для интерпретации модели XGBoosting мы использовали пакет SHAP (SHapley Additive exPlanations), который представляет собой теоретико-игровой подход к объяснению результатов моделей машинного обучения. В частности, нам было интересно понять, как различные функции и значения влияют на общие результаты прогнозирования модели. Таким образом, в SHAP был создан сводный график и исследованы 20 основных характеристик:

Чтобы лучше понять, как тексты в описании проекта влияют на вероятность успеха, мы также включили векторы Tf-Idf с настраиваемыми функциями для обучения отдельной модели и исследовали важность функций. По результатам мы заметили, что «долгосрочная цель» (то есть план на будущее) очень важна для успеха проекта.

Из приведенных выше результатов мы могли бы обобщить несколько общих практик успешного проекта на Kickstarter:

  • Меньше целевая сумма финансирования
  • Более короткое время сбора средств
  • Более длинная история / описание продукта
  • Расширенный словарный запас в письменной форме
  • Меньше профессиональной терминологии и жаргона.
  • Четкий план на будущее (т. е. долгосрочная цель)

Кроме того, были выявлены некоторые тенденции, относящиеся к конкретным категориям:

  • Проекты в области технологий, моды, еды, рукоделия и журналистики сложнее получить на Kickstarter.
  • Дизайн, игры, музыка, комиксы и публикация проектов легче получить на Kickstarter.

После построения и интерпретации модели с настраиваемыми функциями мы затем включили функции встраивания слов из LSA или Doc2Vec вместе с настраиваемыми функциями в обучение модели и проверили модель. представление. Результаты сведены в следующую таблицу:

Из приведенных выше результатов мы заметили, что модель с комбинацией настраиваемых функций и функций Doc2Vec показала наилучшую производительность. Эта окончательная модель была затем экспортирована с использованием pickle для последующей реализации в валидаторе идей.

Разработка алгоритма оценки схожести

Еще одна важная особенность нашего средства проверки идей - это выявление наиболее похожих проектов Kickstarter в наборе данных на основе исходных идей пользователей. Следовательно, нам необходимо разработать подход к вычислению оценки сходства между исходной идеей и существующими проектами, а затем составить отчет по существующим проектам с наивысшей оценкой сходства.

На основе метода рекомендации парфюмерии Лонго оценка ансамблевого сходства была рассчитана путем взятия среднего значения косинусного сходства LSA и косинусного сходства Doc2Vec. Рабочий процесс можно кратко описать следующим образом:

Реализация модели и построение пользовательского интерфейса

На последнем этапе мы интегрировали все вышеперечисленные функциональные блоки в инструмент проверки идей краудфандинга и создали пользовательский интерфейс, который позволял пользователям отправлять описание проекта и связанную с ним информацию.

В сценарии варианта использования после того, как пользователь отправит исходную идею, инструмент автоматически преобразует входные данные в требуемый формат для моделирования и сгенерирует результаты прогнозирования. Кроме того, будут рассчитаны оценки сходства между исходной идеей пользователя и всеми существующими проектами в наборе данных. Будут распечатаны 3 наиболее похожих проекта из той же категории, что и исходная идея пользователя, с прямым сравнением по сумме финансирования, продолжительности, длине описания, лексическому разнообразию и удобочитаемости. Этот рабочий процесс можно резюмировать следующим образом:

Например, мы могли бы протестировать наш инструмент, используя Монеты персонажей: наборы жетонов ролевой игры от Dice Dungeons с веб-сайта Kickstarter. Этот проект был успешно профинансирован, и его не было в наборе данных, который мы использовали для обучения и тестирования моделей. Когда соответствующая информация была добавлена ​​в форму, наша модель правильно предсказала успешность проекта, а также определила другие проекты Kickstarter, связанные с монетными играми, в нашем наборе данных:

Резюме

Таким образом, мы разработали инструмент проверки идей для краудфандинговых проектов Kickstarter. Этот инструмент был построен на основе модели прогнозирования с настраиваемыми функциями (общая информация, лексическое богатство и лексическая читаемость) и функциями встраивания слов (Doc2Vec и LSA). Метод оценки ансамблевого сходства был применен для выявления похожих проектов для дальнейшего использования пользователями. Все функции и пользовательские интерфейсы были интегрированы в этот инструмент по модульному принципу, что позволяет проводить дальнейшее обновление и обслуживание.

Основные выводы

Наряду с разработкой инструмента мы выявили несколько идей для запуска успешного проекта на Kickstarter:

  • Более низкая целевая сумма финансирования и более короткие сроки сбора средств
  • Более длинная история / описание продукта с расширенным словарным запасом, но с меньшим количеством жаргона.
  • Четкий план на будущее (т. Е. масштабная цель)
  • Проекты в области технологий, моды, еды, ремесел и журналистики труднее получить в полной мере.
  • Проще получить полное финансирование для проектов в области дизайна, игр, музыки, комиксов и издательских проектов.

Дальнейшая работа

Представленный здесь инструмент был прототипом. В будущем мы могли бы изменить и улучшить его по двум основным направлениям:

  • Повышение производительности прогнозной модели. Текущая модель была построена с использованием 10 058 проектов Kickstarter. Чтобы еще больше повысить производительность модели, мы могли бы обучить ее на более крупном наборе данных и включить связанную с пользователем информацию, такую ​​как история запуска проекта (хотя эта информация, связанная с пользователем, не является легкодоступной)
  • Измените страницу вывода результатов. В настоящее время страница вывода результатов содержит только результаты прогнозов и сравнение с наиболее похожими проектами. В будущем можно будет изучить функции консультирования, чтобы предоставить пользователям более подробные советы о том, как улучшить идею своего проекта.

Все коды для обучения модели и инструмент проверки идей доступны в этом репо. Вы можете проверить свою первоначальную идею в записной книжке run_model.ipynb.

Подтверждение

Эта работа является заключительным проектом курса обработки естественного языка в программе UCI MSBA. В команду входят Юань Лю, Линься Лю, Тэн-Юнь (Джейкоб) Чунг, Вивиан Кан и Цзелун Цянь. Мы ценим отзывы и предложения профессоров Вибханшу Абхишек, Мин Гу и наших одноклассников по программе UCI MSBA.