Оцінка доменних імен


25

Торгівля доменними іменами - великий бізнес. Один з найкорисніших інструментів для торгівлі доменними іменами - це автоматичний інструмент оцінки, щоб ви могли легко оцінити, скільки коштує даний домен. На жаль, багато служб автоматичної оцінки вимагають членства / підписки для використання. У цьому виклику ви напишете простий інструмент оцінювання, який може приблизно оцінити значення доменів .com.

Введення-виведення

В якості вхідної програми ваша програма повинна взяти список доменних імен, по одному на рядок. Кожне доменне ім’я відповідатиме регулярним виразом ^[a-z0-9][a-z0-9-]*[a-z0-9]$, тобто воно складається з малих літер, цифр та дефісів. Кожен домен має принаймні два символи і ні починається, ні закінчується дефісом. Значення .comопущено з кожного домену, оскільки воно мається на увазі.

Як альтернативна форма введення, ви можете прийняти доменне ім'я як масив цілих чисел, а не рядок символів, якщо ви вкажете бажане перетворення символів у цілі числа.

Ваша програма повинна виводити список цілих чисел, по одному на рядок, який дає оцінені ціни відповідних доменів.

Інтернет та додаткові файли

Ваша програма може мати доступ до додаткових файлів, якщо ви надаєте ці файли як частину своєї відповіді. Вашій програмі також надається доступ до файлу словника (список дійсних слів, які вам не потрібно надавати).

(Редагувати) Я вирішив розширити цю проблему, щоб надати вашій програмі доступ до Інтернету. Існує кілька обмежень, оскільки ваша програма не може шукати ціни (або історію цін) будь-яких доменів, і що вона використовує лише попередні сервіси (останній, щоб приховати деякі лазівки).

Єдиним обмеженням на загальний розмір є обмеження розміру відповідей, накладене SE.

Приклад введення

Це кілька недавно проданих доменів. Відмова від відповідальності: Хоча жоден із цих сайтів не здається шкідливим, я не знаю, хто їх контролює, і тому радимо не відвідувати їх.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Приклад Вихід

Ці числа справжні.

635
31
2000
1
2001
5
160
1

Оцінка балів

Оцінка балів базуватиметься на "різниці логарифмів". Наприклад, якщо домен, проданий за 300 доларів, а ваша програма оцінила його за 500 доларів, то ваш показник для цього домену abs (ln (500) -ln (300)) = 0,5108. Жоден домен не матиме ціни менше 1 долара. Ваш загальний бал - це ваш середній бал для набору доменів, з нижчими балами краще.

Щоб зрозуміти, на які бали слід розраховувати, просто відгадуючи постійну інформацію 36про дані тренувань нижче, ви отримаєте бал приблизно 1.6883. Вдалий алгоритм має оцінку менше, ніж цей.

Я вирішив використовувати логарифми, оскільки значення охоплюють декілька порядків, і дані заповнюватимуться видатками. Застосування абсолютної різниці замість різниці у квадраті допоможе зменшити ефект випускників у балах. (Також зауважте, що я використовую природний логарифм, а не основу 2 або базу 10.)

Джерело даних

Я переглянув список понад 1400 недавно проданих .com доменів від Flippa , веб-сайту аукціону домену. Ці дані становлять набір навчальних даних. Після закінчення терміну подання я зачекаю додатковий місяць, щоб створити тестовий набір даних, за допомогою якого будуть оцінені матеріали. Я також можу вирішити збирати дані з інших джерел для збільшення розміру навчальних / тестових наборів.

Дані про навчання доступні за наступними ознаками. (Відмова від відповідальності. Хоча я використовував просту фільтрацію для видалення явних доменів NSFW, у цьому списку все ще може бути кілька. Також я раджу не відвідувати будь-який домен, який ви не впізнаєте .) Цифри праворуч справжні ціни. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Ось графік розподілу цін набору даних про навчання. Вісь x - це натуральний журнал ціни, враховуючи вісь y. Кожен брусок має ширину 0,5. Шипи зліва відповідають $ 1 і $ 6, оскільки веб-сайт-джерело вимагає збільшення ставок принаймні $ 5. Дані тесту можуть мати дещо інший розподіл.

введіть тут опис зображення

Ось посилання на той самий графік із шириною смуги 0,2. На цьому графіку ви можете бачити шипи на рівні 11 і 16 доларів.


Просто голова вгору, використовуючи найпоширеніші діаграми для оцінки домену, працює беззаперечно! R² ≅ 0

2
Хтось, очевидно, повинен зробити відповідь нейронної мережі для цього.
user48538

1
Чи може програма посилатися на Інтернет (скажімо, пошук Google)? Явно не з метою пошуку цін, звичайно, а для збору даних для використання в якості характеристики.
Джо

@Joe Вибачте, у мене не було можливості відповісти, але я вирішив дозволити доступ до Інтернету.
PhiNotPi

Відповіді:


3

Perl, 1.38605

Я подумав, що я повинен продовжувати та розміщувати свої власні подання, сподіваючись, що це стимулює конкуренцію. Його оцінка 1.38605означає, що це, як правило, відключається від коефіцієнта 3.999(це було моєю зупинкою). Я не використовував жодної бібліотеки машинного навчання, а просто Perl. Це вимагає доступу до словника; Я використовував той звідси .

Будь ласка, не соромтесь використовувати деякі номери / статистичні дані з моєї програми.

use strict;

my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
  chomp $row;
  $dict{lc $row} = 1;
}

my $domain = <>;
chomp($domain);

my $guess = 1;

if($domain =~ /^[a-z]*$/){
    my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 18;
  }
} elsif ($domain =~ /^[0-9]*$/){
  my @bylength = (300000,30001,6000,605,50);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 7;
  }
} elsif ($domain =~ /^[a-z0-9]*$/){
  my @bylength = (52300,523,28);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 23;
  }
} else {
  my @bylength = (50000,500,42,32,32,31);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 12;
  }
}

my $wordfact = 1;

my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, 0, $i;
  if(exists($dict{$word})){
    $leftword = $i;
  }
}

$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;

if($leftword/length($domain) >= 0.8){
  $wordfact *= 2.4;
}

my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, length($domain)-$i, $i;
  if(exists($dict{$word})){
    $rightword = $i;
  }
}

$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;         

$guess *= $wordfact;

my $charfact = 1;
my %charfacts = (
  i => 1.12, #500
  l => 0.84,
  s => 1.09,
  a => 0.94,
  r => 1.03,
  o => 0.97, 
  c => 1.22, #400
  d => 0.88,
  u => 1.07,
  t => 0.95,
  e => 1.08,
  m => 0.91, #300
  p => 1.08,
  y => 0.92,
  g => 0.97,
  ne => 0.56, #100
  n => 1.13,
  z => 0.67,
  re => 1.30,
  es => 0.75,
);
while(my ($key,$value) = each %charfacts){
  if($domain =~ /$key/){
    $charfact *= $value;
  }
}
$guess *= $charfact;

$guess = int($guess + 0.5);
if($guess <= 0){
  $guess = 1;
}

print $guess;

Ось графік, зроблений моєю програмою підрахунку балів, що показує розсіяний графік оцінки фактичної ціни та гістограми помилок. У діаграмі розкидання .:oO@означають 10, 20, 30, 40, 50домени відповідно до цієї точки. У гістограмі кожен Oпредставляє 16 доменів.

Шкала встановлюється на рівні 1 character width = e^(1/3).

введіть тут опис зображення

До цієї програми є три основні етапи. Результати кожного кроку множать разом.

  1. Категоризація за класом символів та довжиною. Він визначає, чи домен - це всі літери, усі цифри, букви та цифри, чи він містить дефіс. Потім воно дає числове значення, яке визначається довжиною домену. Я виявив, що спостерігається дивне зниження значення довжини 5. Я підозрюю, що це пов’язано з вибіркою: більш короткі домени цінні через їх довжину (навіть якщо букви є дурницею), тоді як більшість довших доменів, як правило, є словами / фразами. З метою запобігання надмірному накладенню я вкладаю обмеження в тому, що домени не можуть бути покарані за коротші (тому довжина 5 принаймні така ж, як і довжина 6).

  2. Оцінка змісту слів. Я використовую словник для визначення довжин лівих і правих слів у доменному імені. Наприклад, myawesomesite -> my & site -> 2 & 4. Потім я спробую зробити деяку підгонку, виходячи з того, яка частка доменного імені складається з цих слів. Низькі значення, як правило, вказують на те, що домен не містить слова, містить множинне / модифіковане слово, не в словнику, містить слово, оточене іншими символами (внутрішні слова не виявлені, хоча я намагався це не покращити), або містить кількасловна фраза. Високі значення вказують на те, що це одне слово або, ймовірно, словосполучення у два слова.

  3. Оцінка змісту символів. Я шукав підрядки, які містяться у великій кількості доменів і які, здається, впливають на значення домену. Я вважаю, що це викликано тим, що певні типи слів є більш популярними / привабливішими з різних причин. Наприклад, лист iз'явився приблизно в половині доменів (741 з них), і збільшує значення домену в середньому приблизно на 12%. Це не надмірно; там є щось справжнє, чого я не повністю розумію. Лист lз'являється в 514 доменах і має коефіцієнт 0,84. Деякі з менш поширених букв / діаграм, такі як ne125 разів та дійсно низький коефіцієнт 0,56, можуть бути надмірними.

Для вдосконалення цієї програми мені, певно, потрібно було б використовувати якесь машинне навчання. Крім того, я міг би шукати зв’язки між довжиною, вмістом слова та вмістом символів, щоб знайти кращі способи поєднання цих окремих результатів із загальним оціночним значенням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.