Ocena nazw domen


25

Handel nazwami domen to duży biznes. Jednym z najbardziej przydatnych narzędzi do handlu nazwami domen jest narzędzie do automatycznej oceny, dzięki czemu można łatwo oszacować, ile jest warta dana domena. Niestety wiele usług automatycznej oceny wymaga członkostwa / subskrypcji do korzystania. W tym wyzwaniu napiszesz proste narzędzie do oceny, które może z grubsza oszacować wartości domen .com.

Wejście wyjście

Jako dane wejściowe program powinien pobrać listę nazw domen, po jednej w wierszu. Każda nazwa domeny będzie pasować do wyrażenia regularnego ^[a-z0-9][a-z0-9-]*[a-z0-9]$, co oznacza, że ​​składa się z małych liter, cyfr i łączników. Każda domena ma co najmniej dwa znaki i ani nie zaczyna się, ani nie kończy myślnikiem. Jest .comto pomijane w każdej domenie, ponieważ jest implikowane.

Jako alternatywną formę wprowadzania danych możesz zaakceptować nazwę domeny jako tablicę liczb całkowitych zamiast ciągu znaków, o ile określisz pożądaną konwersję znaków na liczby całkowite.

Twój program powinien wypisać listę liczb całkowitych, po jednej w wierszu, która podaje oszacowane ceny odpowiednich domen.

Internet i dodatkowe pliki

Twój program może mieć dostęp do dodatkowych plików, o ile podasz je jako część odpowiedzi. Twój program ma również dostęp do pliku słownika (listy prawidłowych słów, których nie musisz podawać).

(Edytuj) Zdecydowałem się rozszerzyć to wyzwanie, aby umożliwić Twojemu programowi dostęp do Internetu. Istnieje kilka ograniczeń, ponieważ Twój program nie może wyszukiwać cen (lub historii cen) żadnych domen i że korzysta tylko z wcześniej istniejących usług (te ostatnie w celu zatuszowania niektórych luk).

Jedynym ograniczeniem całkowitego rozmiaru jest limit wielkości odpowiedzi nałożony przez SE.

Przykładowe dane wejściowe

To są niektóre z niedawno sprzedanych domen. Oświadczenie: Mimo że żadna z tych stron nie wydaje się złośliwa, nie wiem, kto je kontroluje, i dlatego odradzam ich odwiedzanie.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Przykładowy wynik

Te liczby są prawdziwe.

635
31
2000
1
2001
5
160
1

Punktacja

Punktacja będzie oparta na „różnicy logarytmów”. Na przykład, jeśli domena sprzedana za 300 USD, a Twój program oszacował ją na 500 USD, twój wynik dla tej domeny to abs (ln (500) -ln (300)) = 0,5108. Żadna domena nie będzie miała ceny niższej niż 1 USD. Twój ogólny wynik to średni wynik dla zestawu domen, przy czym niższe wyniki są lepsze.

Aby dowiedzieć się, jakich wyników należy się spodziewać, wystarczy zgadnąć stałą 36dla danych treningowych poniżej, uzyskując wynik około 1.6883. Skuteczny algorytm ma mniejszy wynik.

Zdecydowałem się użyć logarytmów, ponieważ wartości obejmują kilka rzędów wielkości, a dane zostaną wypełnione wartościami odstającymi. Zastosowanie różnicy bezwzględnej zamiast kwadratu różnicowego pomoże zmniejszyć wpływ wartości odstających w punktacji. (Zauważ też, że używam logarytmu naturalnego, a nie bazy 2 lub 10).

Źródło danych

Przejrzałem listę ponad 1400 ostatnio sprzedanych domen .com z Flippa , witryny aukcji domen. Dane te będą stanowić zestaw danych treningowych. Po zakończeniu okresu przesyłania poczekam dodatkowy miesiąc na utworzenie zestawu danych testowych, za pomocą którego będą oceniane punkty. Mogę również zdecydować o gromadzeniu danych z innych źródeł, aby zwiększyć rozmiar zestawów szkoleniowych / testowych.

Dane treningowe są dostępne na poniższym schemacie. (Zastrzeżenie: Mimo że użyłem prostego filtrowania, aby usunąć niektóre rażąco domeny NSFW, kilka może nadal znajdować się na tej liście. Ponadto odradzam odwiedzanie domen, których nie rozpoznajesz .) Liczby po prawej stronie są prawdziwe ceny. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Oto wykres rozkładu cen zestawu danych treningowych. Oś X jest naturalnym dziennikiem ceny, licząc oś Y. Każdy słupek ma szerokość 0,5. Skoki po lewej stronie odpowiadają 1 USD i 6 USD, ponieważ witryna źródłowa wymaga ofert o co najmniej 5 USD. Dane testowe mogą mieć nieco inny rozkład.

wprowadź opis zdjęcia tutaj

Oto link do tego samego wykresu o szerokości paska 0,2. Na tym wykresie widać wzrosty w wysokości 11 i 16 USD.


Tylko heads-up, używając najczęstszych digrafów, aby zdobyć domenę, działa fatalnie! R² ≅ 0

2
Ktoś oczywiście musi wykonać w tym celu odpowiedź w sieci neuronowej.
user48538,

1
Czy program może łączyć się z Internetem (powiedz, zapytanie google)? Oczywiście nie w celu wyszukiwania cen, ale w celu gromadzenia danych, które można wykorzystać jako cechę charakterystyczną.
Joe

@ Joe Przepraszam, nie miałem okazji odpowiedzieć, ale zdecydowałem się zezwolić na dostęp do Internetu.
PhiNotPi,

Odpowiedzi:


3

Perl, 1,38605

Uznałem, że powinienem napisać własne zgłoszenie, mając nadzieję, że pobudzi to konkurencję. Jego wynik 1.38605oznacza, że ​​zazwyczaj jest wyłączony przez czynnik 3.999(to był mój punkt zatrzymania). Nie korzystałem z żadnych bibliotek uczenia maszynowego, tylko Perl. Wymaga dostępu do słownika; Użyłem tego stąd .

Proszę używać własnych liczb / statystyk z mojego programu.

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;

Oto wykres wykonany przez mój program oceniania, pokazujący rozrzut wyceny w stosunku do rzeczywistej ceny i histogram błędów. W wykres punktowy .:oO@średnie 10, 20, 30, 40, 50domen w tym momencie, odpowiednio. Każda z histogramów Oreprezentuje 16 domen.

Skala jest ustawiona na 1 character width = e^(1/3).

wprowadź opis zdjęcia tutaj

Program składa się z trzech głównych kroków. Wyniki z każdego kroku są mnożone razem.

  1. Kategoryzacja według klasy postaci i długości. Określa, czy domena składa się z samych liter, wszystkich cyfr, liter i cyfr, czy też zawiera myślnik. Następnie podaje wartość liczbową określoną przez długość domeny. Odkryłem, że istnieje dziwny spadek wartości wokół długości 5. Podejrzewam, że wynika to z próbkowania: krótsze domeny są cenne ze względu na ich długość (nawet jeśli litery są nonsensowne), podczas gdy większość dłuższych domen to zwykle słowa / frazy. Aby zapobiec nadmiernemu dopasowaniu, nałożyłem ograniczenie na to, że domeny nie mogą być karane za krótsze (więc długość 5 jest co najmniej tak dobra, jak długość 6).

  2. Ocena treści słów. Używam słownika do określania długości słów po lewej i po prawej stronie w nazwie domeny. Na przykład myawesomesite -> my & site -> 2 & 4. Następnie próbuję dopasować na podstawie tego, jaką część nazwy domeny tworzą te słowa. Niskie wartości zazwyczaj wskazują, że domena nie zawiera słowa, zawiera słowo pluralizowane / zmodyfikowane, którego nie ma w słowniku, zawiera słowo otoczone innymi znakami (słowa wewnętrzne nie są wykrywane, chociaż próbowałem tego bez poprawy) lub zawiera fraza kilku słów. Wysokie wartości wskazują, że jest to jedno słowo lub prawdopodobnie fraza składająca się z dwóch słów.

  3. Ocena zawartości postaci. Szukałem podciągów, które były zawarte w wielu domenach i które zdawały się wpływać na wartości domeny. Uważam, że jest to spowodowane tym, że niektóre typy słów są bardziej popularne / atrakcyjniejsze z różnych powodów. Na przykład, list ipojawił się w około połowie domen (741 z nich) i podnosi wartość domeny średnio o około 12%. To nie jest zbyt dobre; jest coś prawdziwego, czego nie do końca rozumiem. Litera lwystępuje w 514 domenach i ma współczynnik 0,84. Niektóre z mniej powszechnych liter / cyfr, jak te, nektóre pojawiły się 125 razy i mają naprawdę niski współczynnik 0,56, mogą być zbyt dobre.

Aby ulepszyć ten program, prawdopodobnie potrzebowałbym pewnego rodzaju uczenia maszynowego. Mogę również poszukać związków między długością, zawartością słów i treścią znaków, aby znaleźć lepsze sposoby łączenia tych oddzielnych wyników w ogólną wartość oceny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.